正则表达式:仅匹配字符的非重复出现

时间:2011-05-20 09:58:38

标签: regex

我需要在字符串中查找并替换所有出现的撇号字符,但前提是这个撇号后面没有其他撇号。

那是

  

abc'def

是匹配但是

  

abc''def

不匹配。

我已经编写了一个工作模式 - (^|[^'])'($|[^']),但我相信它可能更短更简单。

谢谢,

瓦列

4 个答案:

答案 0 :(得分:10)

取决于您的环境 - 如果您的环境支持前瞻和后瞻,您可以执行此操作:(?<!')'(?!')

参考:http://www.regular-expressions.info/lookaround.html

答案 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)是一个负面的后瞻断言

http://www.regular-expressions.info/lookaround.html

working DEMO