Регулярные выражения в notepad ++ (Поиск и замена) - PullRequest
3 голосов
/ 04 октября 2019

У меня есть список тысяч записей в документе .txt. некоторые из них выглядят как эти записи

201910031044         "00059"    "11.31AG"  "Senior Champion"
201910031044         "00060"    "GBA146"  "Junior Champion"
201910031044         "00999"    "10.12G"  "ProAM"
201910031044         "00362"    "113.1LI"  "Abcd"

Всякий раз, когда происходит подобная запись, я бы хотел избавиться от последних слов / цифр / и т. д. в последних кавычках (например, «Старший чемпион»,"Юный Чемпион" и т. Д. Здесь есть много возможностей)

например (до)

201910031044         "00059"    "11.31AG"  "Senior Champion"

после

201910031044         "00059"    "11.31AG"

Я попробовал следующее регулярное выражение, но это неt работа.

Поиск: ^([0-9]{17,17} + "[0-9]{8,8}" + "[a-zA-Z0-9]").*$

Заменить: \1 (заменить строку)

ОК. Я даже забыл знак . (точка), даже если яне иметь знак . (точка), он не будет работать. Не уверен, имеет ли это какое-либо отношение, когда знак + используется более одного раза.

Ответы [ 4 ]

0 голосов
/ 04 октября 2019

Я бы хотел избавиться от последних слов / цифр / и т. Д. В последних кавычках

Это делает работу:

  • Ctrl + H
  • Найти что: ^.+\K\h+".*?"$
  • Заменить на: LEAVE EMPTY
  • CHECK Обтекание
  • CHECK Регулярное выражение
  • UNCHECK . matches newline*
  • Заменить все

Объяснение:

^           # beginning of line
  .+        # 1 or more any character but newline
  \K        # forget all we have seen until this position
  \h+       # 1 or more horizontal spaces
  ".*?"     # something inside quotes
$           # end of line

Снимок экрана (до):

enter image description here

Снимок экрана (после):

enter image description here

0 голосов
/ 04 октября 2019

У вас проблема с количеством символов:

  • вы указываете, что строка должна начинаться с точно 17 цифр ([0-9]{17,17}). Однако в данных есть только 12 цифр 201910031044.
    • вы можете указать ровно 12 цифр, используя {12} или, если это может быть 12-17, то {12,17}. Исходя из текущих данных, я буду считать ровно 12.
  • аналогично, для второго столбца вы указываете, что он точно 8 цифр, заключенный в кавычки ("[0-9]{8,8}") но он имеет только 5 цифр в кавычках.
    • снова, вы можете указать ровно 5 с {5} или 5-8 с {5,8}. Я предположу, что точно 5.
  • , наконец, квантификатор для конечного поля не существует, поэтому регулярное выражение пытается сопоставить точно один символ, который является буквой иличисло в кавычках "[a-zA-Z0-9]".
    • Я не уверен, есть ли какие-либо ограничения на количество символов, поэтому я бы пошел с одним или несколькими, используя + в качестве квантификатора "[a-zA-Z0-9]+" - если вы можете иметь ноль или более, то выможно использовать *, или если это любой другой счет от m до n , тогда вы можете использовать {m,n}, как и раньше.

Не проблема с количеством символов, но последний столбец также может иметь точки, но регулярное выражение не учитывается. Вы можете просто добавить . в квадратных скобках, и он будет только совпадать с точечными символами. Обычно он используется в качестве символа подстановки, но теряет свое особое значение в классе символов ([]), поэтому вы получаете "[a-zA-Z0-9.]+"

Собирая все вместе, вы получаете

Поиск: ^([0-9]{12} + "[0-9]{5}" + "[a-zA-Z0-9.]+").*$
Заменить: \1

Что избавится от чего-либо после третьего поля в Notepad ++.

Это можно немного сократить, используя \d вместо [0-9] для цифр и \s+ для пробелов вместо +. В качестве преимущества, \s также будет соответствовать другим пробелам, таким как вкладки, поэтому вам не придется вручную их учитывать. Это приводит к

Поиск: ^(\d{12}\s+"\d{5}"\s+"[a-zA-Z0-9.]+").*$
Замена: \1

0 голосов
/ 04 октября 2019

Если вы хотите избавиться от последних слов / цифр / и т. Д. В последних кавычках, вы можете записать в группу то, что было до этого, и сопоставить с последними кавычками и всем, что между ними, чтобы удалить его, используя класс отрицанных символов .

Если между значениями могут быть пробелы или символы табуляции, вы можете использовать [ \t]+, чтобы сопоставить их (использование \s также может соответствовать новой строке)

Обратите внимание, что {17,17} и {8,8} также могут быть записаны как {17} и {8}, которые в этом случае должны быть {12} и {5}

^([0-9]{12}[ \t]+"[0-9]{5}"[ \t]+"[a-zA-Z0-9.]+")[ \t]{2,}"[^"\r\n]+"

По частям

  • ^ Начало строки
  • ( Захват группа 1
    • [0-9]{12}[ \t]+ Совпадение 12 цифр и 1+ пробелов или табуляций
    • "[0-9]{5}"[ \t]+ Совпадение 5 цифр между " и 1+ пробелами или табуляциями
    • "[a-zA-Z0-9.]+" Совпадение 1+ раз с любым из перечисленных значений "
  • ) Закрыть группу
  • [ \t]{2,} Совпадение 1+ раз
  • "[^"\r\n]+"

В группе замены используйте 1 $1

Regex demo

До

enter image description here

После

enter image description here

0 голосов
/ 04 октября 2019

RegEx ищет 4-ую двойную кавычку:

^(?:[^"]*\"){4}([^|]*)

Вы можете увидеть это демо: https://regex101.com/r/wJ9yS6/163

Вам все равно нужно будет разобрать строки, так что, вероятно, легче открывать вExcel или анализ с использованием кода в качестве CSV.

...