Регулярные выражения Notepad ++ - PullRequest
0 голосов
/ 20 февраля 2020

При использовании текста с разделителями символов, какой код позволяет мне извлекать определенные c сегменты в данной строке? Из заданного набора данных (с выделением жирным шрифтом):

1194459945, 11/07/2007 18: 25: 45,2, vnta, 287.78,2, 7.783 , 2,34.111,2,1.3,2, 89,54 , 2,1485,31,6612

Попытка получить его как:

11/07/2007 7.783 89.54

В настоящее время я достиг следующих успехов: (\ w +,) (. +) (Что дало мне первые два столбца, но я застрял в том, как достичь 7.783 и сегментируйте это. Без включения всей строки. Я не могу поставить \, потому что это не помогает.

1 Ответ

1 голос
/ 20 февраля 2020

Примерно так может работать .. ^.*?,([^ ,]+)(?:.*?,){5}([^ ,]+)(?:.*?,){6}([^ ,]+).*$

Объяснение:

  • ^ - Начало строки / строки
  • .*?, - соответствует чему-либо до первой запятой
  • ([^ ,]+) - соответствует чему-либо, кроме пробела или запятой, и сохраняет его в группе захвата 1 (ваша дата)
  • (?:.*?,){5} - группа без захвата, соответствующая полям и запятым для следующих 5 полей
  • ([^ ,]+) - соответствует чему-либо, кроме пробела или запятой, и сохраняет его в группе захвата 2 (ваш 7,783)
  • (?:.*?,){6} - еще одна группа без захвата для сопоставления полей и запятых для следующих 6 полей
  • ([^ ,]+) - сопоставляет что-либо, кроме пробела или запятой, и сохраняет его в группа захвата 3 (ваш 89,54)
  • .*$ - сопоставляет все, что следует за этим совпадением, до конца строки / строки

Notepad ++ :

Вы можете использовать инструмент поиска и замены в Notepad ++ для замены строк только теми группами захвата, которые c Доступ к нему осуществляется с помощью знака доллара, за которым следует номер группы захвата, например:

Find: ^.*?,([^ ,]+)(?:.*?,){5}([^ ,]+)(?:.*?,){6}([^ ,]+).*$
Replace: $1 $2 $3

Тест:

До:

1194459945,11/07/2007 18:25:45,2,vnta,287.78,2,7.783,2,34.111,2,1.3,2,89.54,2,1485.31,26.612

После:

11/07/2007 7.783 89.54
...