Регулярное выражение для выбора некоторых символов, кроме тех, которые заключены в двойные кавычки - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть такое предложение:

Number; Year; "43643-25262.123; ABC2322"; Project is supported by the Organization X ("No. 11AZD121"); adress; "12344;123131; 3859563";;; employees

Как написать регулярное выражение для выбора точек с запятой (;), за исключением тех, которые находятся в полях с двойными кавычками (")?Поэтому я ожидаю, что регулярное выражение найдет все точки с запятой, кроме тех, которые находятся в "43643-25262.123; ABC2322" и "12344;123131; 3859563".

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Мне кажется, что у вас есть строка CSV (значения, разделенные запятыми), в которой вместо запятых используются точки с запятой. Я хотел бы посмотреть, существует ли существующий код, который вы могли бы использовать на своем языке программирования, который обрабатывает файлы CSV и может использовать точки с запятой в качестве разделителя.

Например, в модуле Perl Text :: CSV_XS вы можете вызвать модуль ->sep_set для определения используемых разделителей.

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

1 голос
/ 11 апреля 2019

Это должно работать

input = Number; Year; "43643-25262.123; ABC2322"; Project is supported by the Organization X ("No. 11AZD121"); adress; "12344;123131; 3859563";;; employees

pattern= (!?)(“.*?”;*)

input.match(pattern)

//output Number; Year;  Project is supported by the Organization X (); adress;  employees
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...