我需要在字符串中查找并替换所有出现的撇号字符,但前提是这个撇号后面没有其他撇号。
那是
abc'def
是匹配但是
abc''def
不匹配。
我已经编写了一个工作模式 - (^|[^'])'($|[^'])
,但我相信它可能更短更简单。
谢谢,
瓦列
答案 0 :(得分:10)
取决于您的环境 - 如果您的环境支持前瞻和后瞻,您可以执行此操作:(?<!')'(?!')
答案 1 :(得分:2)
我认为你的模式简短而精确。你可能会使用负向前瞻/后视,但它们会使它变得更加复杂。可维护性很重要。
答案 2 :(得分:2)
你必须小心撇号数量不均匀:
abc'''def
你可能做想要替换3 rd ,并留下1 st 和2 nd 在那里。
你可以这样做(假设你已经匹配了字符串文字而只想替换不均匀编号的尾随撇号):
搜索模式:
(('')*)'
并将其替换为
$1
是第1组:偶数撇号(或根本没有撇号)。
我不确定您正在解决的实际问题,但是如果您正在解析/读取CSV文件,或者使用CSV输入的字符串,我强烈建议您使用体面的CSV解析器。几乎所有语言都以某种形式存在它们。
答案 3 :(得分:0)
在这里看到nagative lookahed q(?!u)
(?=pattern)
是一个积极的前瞻性断言(?!pattern)
是一个负面的前瞻断言(?<=pattern)
是一个积极的后视断言(?<!pattern)
是一个负面的后瞻断言