Regex заменяет все новые строки между; "и"; - PullRequest
0 голосов
/ 22 января 2019

CSV, как это:

A;B;C
1;"a";foo
2;"a
b";{456}
3;"c
d
e";{789}
4;"d

e
f

g";bar

Мне нужно заменить все символы новой строки (CRLF) между; "и"; с некоторым маркером, скажем <BR>. Результат должен быть:

A;B;C
1;"a";foo
2;"a<BR>b";{456}
3;"c<BR>d<BR>e";{789}
4;"d<BR><BR>e<BR>f<BR><BR>g";bar

Все остальные символы новой строки следует оставить нетронутыми. Я пытаюсь сделать это с заменой Regex в Notepad ++. Пока я нашел, что могу заменить

(;")(([^"])(\r\n)([^"])+)(";)

с

\1\3<BR>\5\6

Это нормально работает в строке № 2, слишком много удаляет в строках № 3 и № 4. Я мог бы написать сценарий Python для него, если мне нужно, но я надеюсь, что это быстрее в Notepad ++. Какие-либо предложения?

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать

Найти что : (?:\G(?!^(?<![\s\S]))|;")(?:(?!;"|";).)*\K\R
Заменить на : <BR>

информация

  • (?:\G(?!^(?<![\s\S]))|;") - позиция после успешного совпадения (\G(?!^(?<![\s\S])), здесь \G соответствует началу строки или концу предыдущего совпадения, а (?!^(?<![\s\S])) необходимо для вычитания начала совпадения местоположения документа) или (|) подстрока ;"
  • (?:(?!;"|";).)* - любой символ, кроме символа разрыва строки, 0+ вхождений, как можно больше, который не запускает последовательность символов ;" или ";
  • \K - оператор сброса совпадений, который отбрасывает сопоставленный текст
  • \R - шаблон разрыва строки.

enter image description here

...