正则表达式匹配字段内 CSV 中的引号

Regex to match quotes in CSV inside fields

我正在尝试编写一个正则表达式来匹配 CSV 字段中的双引号(并用转义双引号替换它们,但替换部分很容易)。

所以我想要

"field1","field2" -> "field1","field2"
"field1","fie"ld2" -> "field1","fie""ld2"

我使用 (?<!;)"(?!;) 作为我的匹配表达式,几乎 有效 - 但它不处理行首或行尾的引号.我需要像 (?<![;$])"(?![;^]) 这样的东西,它不起作用,因为这里匹配了确切的 $^ 字符 - 或者 (?<!(;|$))"(?!(;|^)) 也不起作用,因为负向后看不能是可变长度。

请问正确的做法是什么?

PCRE 正则表达式引擎不允许在 lookbehind 中捕获其中包含交替运算符的组。

您可以将您尝试的正则表达式改写为

(?<!;|^)"(?!;|$)
(?<=[^;])"(?=[^;])

the regex demo and this regex demo

(?<!;|^)"(?!;|$) 模式匹配 " 字符,该字符不在字符串的开头且前面没有紧跟 ; 字符(由于 (?<!;|^))并且后面没有紧跟 ; 字符且不在字符串末尾(参见 (?!;|$))。

(?<=[^;])"(?=[^;]) 正则表达式匹配一个 " ,它紧跟一个非 ; 的字符(因此,不允许字符串位置的开头),然后是; 以外的字符(不允许字符串结束位置)。