Регулярное выражение с одинарной строкой в ​​конце - PullRequest
0 голосов
/ 23 мая 2018

У меня есть CSV, где все поля заключены в "".Иногда встречаются плохо отформатированные строки вида

Поле1, Поле2, Поле3, Поле4 "

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

«Поле1», «Поле2», «Поле3», «Поле4»

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Это может работать для вас (GNU sed):

 sed '/^\([^"]*\("[^"]*"\)*\)*$/!d' file

Удалите строку, если она не содержит ноль или более пар двойных кавычек.

0 голосов
/ 23 мая 2018

Вы можете просто найти следующее регулярное выражение, соответствующее вашей строке

^[^"]*"$

Демо

Это будет выглядеть и соответствовать всеми совпадают с " в конце строки.

Если первый " не находится в конце строки, строка не будет соответствовать.

0 голосов
/ 23 мая 2018

Если содержимое поля не содержит экранированных кавычек, вы можете проверить строку
на четность кавычек.

Если это совпадает, то удалите строку:

^(?![^"]*(?:"[^"]*"[^"]*)*$).+$

Это также может быть адаптировано для учета экранированных кавычек.
Требуется немного более сложныйрегулярное выражение.

0 голосов
/ 23 мая 2018

Найден ответ.

Использование расширенного регулярного выражения:

'/^[^"]+"$/'
...