В Notepad++, как заменить текст между двумя разделителями на несколько строк
Файл с разделителями-запятыми создается при экспорте контактов 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 ответ
Нижеследующее работает для меня с Notepad++ так же, как вы объясняете, что вам нужно, а также с примерами данных, которые вы предоставили в своем вопросе.
Огни,,
Камера.,,
- Найти то, что:
((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
- Заменить:
$1 $2
- Убедитесь, что опция Регулярное выражение включена
- Убедитесь, что опция Wrap Around отмечена
- Нажмите
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]+([^"]*+")