正则表达式匹配行,末尾有单个 "

Regex matching line with single " at the end

我有一个 csv,其中所有字段都用“”括起来。偶尔会有格式错误的行

Field1,Field2,Field3,Field4"

具有可变数量的字段。我需要删除这些特定的行,避免使用

形式的所有行

"Field1","Field2","Field3","Field4"

找到答案。

使用扩展正则表达式:

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

您只需查找以下正则表达式即可匹配您的行

^[^"]*"$

Demo

这将查找并匹配所有字符并匹配行尾的 "

如果第一个"不在行尾,则不会匹配该行。

如果字段内容不包含转义引号,可以测试
报价均匀度线。

如果匹配,则删除行:

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

这也可以适应转义引号。
需要更复杂的正则表达式。

这可能对你有用 (GNU sed):

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

删除该行,除非它包含零对或多对双引号。