В Notepad ++, как заменить текст между двумя разделителями на несколько строк

1746
EdinTexas

Файл с разделителями-запятыми создается при экспорте контактов Google в так называемый «формат Google CSV (для импорта в учетную запись Google)». Проблема заключается в том, что этот формат обрабатывает заметки в несколько строк, вставляя текст в кавычки и позволяя использовать CRLF с этими кавычками.

Другими словами, представьте, что запись с именем, примечанием, электронной почтой, если она имеет многострочную заметку, выглядит в файле .csv следующим образом:

Имя "Примечание FirstLine \ r \ n

SecondNoteLine \ г \ п

Lastnoteline», email.addr @ domain.net \ г \ п

Та же запись без поля примечания выглядит следующим образом и находится в одной строке (более стандартно):

Имя ,, email.addr @ domain.net \ г \ п

Я пытаюсь сформировать правильное выражение регулярного выражения, и попытался извлечь его из Как использовать регулярные выражения в Notepad ++ (учебник), но безрезультатно.

Самое близкое, что я получил (не очень близко)
, это \ ". *, \"

с . Соответствующий перевод строки.

Выражение, которое я пытаюсь сопоставить:

"Выберите текст между" и ", только если есть один или несколько / r / n" "и замените его на NUL"

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

На данный момент мои глаза кровоточат, и любая помощь будет оценена.

1

1 ответ на вопрос

2
Pimp Juice IT

Нижеследующее работало для меня с Notepad ++ так же, как вы объясняете, что вам нужно, и с примерами данных, которые вы предоставили в своем вопросе.

Огни, ,

Камера., ,

  1. Найти то, что: ((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
  2. Заменить: $1 $2
  3. Убедитесь, что опция Регулярное выражение включена
  4. Убедитесь, что опция Wrap Around отмечена
  5. Нажмите Replace Allстолько раз, сколько вам нужно, чтобы получить окончательные и ожидаемые результаты для ваших записей

Действие, ,


Объяснение:

( (?:^|\r\n) Begin at start of file or before the CRLF before the start of a record [^"]*+ Consume all chars up to the opening " " Consume the opening " [^\r\n"]*+ Consume all chars up to either the first CRLF or the closing " ) Save as capturing group 1 (= everything in record before the target CRLF) \r\n Consume the target CRLF without capturing it ( [^"]*+ Consume all chars up to the closing " " Consume the closing " ) Save as capturing group 2 (= the rest of the string after the target CRLF) 

Примечание: * + является собственническим квантификатором. Используйте их соответствующим образом, чтобы ускорить выполнение.

Обновить:

Эта более общая версия регулярного выражения будет работать с любой последовательностью разрыва строки ( \r\n, \rили \n):

((?:^|[\r\n]+)[^"]*+"[^\r\n"]*+)[\r\n]+([^"]*+")

Источник

Вот Это Да! Большое спасибо как за решение, так и за объяснение, которое позволит мне выйти из себя! Спасибо!!! EdinTexas 7 лет назад 0
@EdinTexas - я рад слышать, что вы решили свою проблему, когда у вас есть возможность, пожалуйста, не стесняйтесь нажать маленькую галочку, чтобы сделать ее зеленым в верхней левой части моего ответа, чтобы принять его в качестве принятого ответа, если это помогло вам разрешить ваш запрос и замкнуть цикл вашего запроса ... Проверьте [Принятие ответа] для визуального представления того, что проверять и т. д., если вы еще не знакомы. Спасибо!! Pimp Juice IT 7 лет назад 0