Исправить выражение регулярного выражения, используемое для замены всех \ n и \ r внутри кавычек - PullRequest
1 голос
/ 06 августа 2020

Это может быть трудно объяснить, я сделаю все возможное. В настоящее время я работаю над синтаксическим анализатором потока преобразования csv в nodejs, но я изо всех сил пытаюсь заменить все \ n и \ r внутри кавычек ("), которые заключают значение.

На данный момент у меня есть следующие regex:

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

Где; - разделитель столбца.

И вот два примера: первый, где он делает то, что ожидается, и второй, где он захватывает, но не должен ' t, потому что; находится внутри кавычек.

Первый тест (успех)

test;"123";"this description with new line feed  below should be
matched by regex";test;"1.0"
 

Второй тест (ошибка)

NewLine1;"test - this one should not be captured by the regex but its being captured ";test;1
NewLine2;"test that went wrong"

Есть ли способ выбрать текст в кавычках, содержащий точку с запятой перед первой цитатой и содержащий точку с запятой после последней цитаты, но игнорировать точку с запятой внутри кавычек? Я думаю, это то, что мне нужно, поэтому второй пример не принимается во внимание учетная запись для совпадения регулярного выражения.

Заранее спасибо.

1 Ответ

1 голос
/ 06 августа 2020

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

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

Regex Demo

Я изменил [;] на ;, потому что они эквивалентны в твоем случае. Также добавлен символ ; к [^";], потому что значение столбца вашего потока CSV не может иметь этот символ.

Я не знаю, почему у вас есть "" в регулярном выражении, но если вы ищете, учитывая другое двойные кавычки в значении столбца, я предполагаю, что они должны быть экранированы \, поэтому вы можете использовать регулярное выражение, например (^|;)"(?:(?<=\\)"|[^";])*[\n\r]+(?:(?<=\\)"|[^";])*", которое имеет (?<=\\)" вместо "", что указывает на символ ", предшествующий обратным слешам. (\")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...