正则表达式匹配字段内 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。
(?<!;|^)"(?!;|$)
模式匹配 "
字符,该字符不在字符串的开头且前面没有紧跟 ;
字符(由于 (?<!;|^)
)并且后面没有紧跟 ;
字符且不在字符串末尾(参见 (?!;|$)
)。
(?<=[^;])"(?=[^;])
正则表达式匹配一个 "
,它紧跟一个非 ;
的字符(因此,不允许字符串位置的开头),然后是;
以外的字符(不允许字符串结束位置)。
我正在尝试编写一个正则表达式来匹配 CSV 字段中的双引号(并用转义双引号替换它们,但替换部分很容易)。
所以我想要
"field1","field2" -> "field1","field2"
"field1","fie"ld2" -> "field1","fie""ld2"
我使用 (?<!;)"(?!;)
作为我的匹配表达式,几乎 有效 - 但它不处理行首或行尾的引号.我需要像 (?<![;$])"(?![;^])
这样的东西,它不起作用,因为这里匹配了确切的 $
和 ^
字符 - 或者 (?<!(;|$))"(?!(;|^))
也不起作用,因为负向后看不能是可变长度。
请问正确的做法是什么?
PCRE 正则表达式引擎不允许在 lookbehind 中捕获其中包含交替运算符的组。
您可以将您尝试的正则表达式改写为
(?<!;|^)"(?!;|$)
(?<=[^;])"(?=[^;])
见the regex demo and this regex demo。
(?<!;|^)"(?!;|$)
模式匹配 "
字符,该字符不在字符串的开头且前面没有紧跟 ;
字符(由于 (?<!;|^)
)并且后面没有紧跟 ;
字符且不在字符串末尾(参见 (?!;|$)
)。
(?<=[^;])"(?=[^;])
正则表达式匹配一个 "
,它紧跟一个非 ;
的字符(因此,不允许字符串位置的开头),然后是;
以外的字符(不允许字符串结束位置)。