【发布时间】:2021-09-02 12:00:59
【问题描述】:
我正在尝试编写一个正则表达式来匹配 CSV 字段中的双引号(并用转义的双引号替换它们,但替换部分很容易)。
所以我想要
"field1","field2" -> "field1","field2"
"field1","fie"ld2" -> "field1","fie""ld2"
我使用(?<!;)"(?!;) 作为我的匹配表达式,这几乎 工作 - 但它不处理行首或行尾的引号。我需要像 (?<![;$])"(?![;^]) 这样的东西,它不起作用,因为精确的 $ 和 ^ 字符在这里匹配 - 或者 (?<!(;|$))"(?!(;|^)) 这也不起作用,因为负向后看不能是可变长度。
请问这样做的正确方法是什么?
【问题讨论】:
-
为什么要捕获环视模式?
(?<!;|^)"(?!;|$)有效。见the regex demo。更好的是,使用(?<=[^;])"(?=[^;])甚至不使用交替。