1

Файл с разделителями-запятыми создается при экспорте контактов 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

Нижеследующее работало для меня с 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]+([^"]*+")

Источник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .