Использовать регулярное выражение, чтобы найти строки в оболочку содержимого
Прямой вопрос: Как я могу использовать регулярное выражение lookarounds для поиска экземпляров rn, которые встречаются между набором символов (стоят в открытых и закрывающих тегах), "[
и ]"
с произвольными символами и разрывами строк внутри?
Ситуация:
У меня есть большая база данных, экспортированная в текстовые файлы с разделителями или запятыми, которые я пытаюсь импортировать в excel. Проблема заключается в том, что некоторые ячейки берутся из текстовых областей, содержащих разрывы строк, и квалифицируются как двойные двойные кавычки. При импорте в excel эти разрывы строк обрабатываются как новые строки. Я не могу настроить способ экспорта файла. I данные должны быть сохранены, но точный формат этого не делает, поэтому я планировал использовать некоторый заполнитель для возврата
или ~
Вот общая иллюстрация формата моих данных:
column1rowA column2rowA column3rowA column4rowA
column1rowB column2rowB "column3rowB
3Bcont
3Bcont
3Bcont
" column4rowB
column1rowC column2rowC column4rowC
column1rowD column2rowD "column3rowD
3Dcont" column4rowD
Моя мысль состояла в том, чтобы попытаться выбрать и заменить разрывы строк в кавычках с помощью регулярного поиска и замены в Notepad++. Попробовать и сделать проще я уже пробовал добавление символа в двойные кавычки, чтобы указать, является ли это открывающая или закрывающая кавычка:
"[column3rowB
3Bcont
3Bcont
3Bcont
]"
Я новичок в регулярных выражениях. Прогресс, которого я добился (что не так уж и много), таков:
(?<="[)
отсутствует какой-то подстановочный знак rn(?=.*]")
Каждая итерация, которую я пробовал, также включала каждый разрыв строки между первым "[
и последним ]"
Я также был бы признателен за любые другие подходы, которые решают основную проблему
2 ответа:
Если вы можете использовать какой-либо инструмент, отличный от Notepad++, вы можете использовать это регулярное выражение (см. Мой рабочий пример на regex101):
(?!\n(([^"]*"){2})*[^"]*$)\n
Он использует отрицательный lookahead для поиска разрывов строк только тогда, когда за ними не следует четное число кавычек. Вы можете заменить их на
<br>
, пробелы или все, что подходит.Разбивка:
(?! ... )
это отрицательный взгляд, необходимый, потому что он нулевой ширины. Все, что соответствует ему, по-прежнему будет доступно для соответствия снова.
(([^"]*"){2})*
это еще одна ключевая деталь. Он обеспечивает четные пары символов без кавычек, за которыми следует кавычка.
[^"]*$
это гарантирует, что там не будет больше кавычек до конца строки.Предостережение: Я не смог заставить его работать в Notepad++, потому что он всегда распознает
$
как конец строки, а не конец всей строки.