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

Regular Expression: match only non-repeated occurrence of a character

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

那就是

abc'def

是一场比赛

abc''def

不是一场比赛。

我已经制定了一个工作模式——(^|[^'])'($|[^']),但我相信它可能会更短、更简单。

谢谢,

瓦莱里


取决于您的环境-如果您的环境支持前瞻性和前瞻性,您可以这样做:(?

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


你必须注意不均匀的撇号:

1
abc'''def

如果你想替换第三个,把第一个和第二个留在那里。

您可以这样做(假设您已经匹配了字符串文本,并且只想替换编号不均匀的尾随撇号):

搜索模式:

1
(('')*)'

换成

1
$1

第1组:偶数的撇号(或者根本没有撇号)。

我不确定您要解决的实际问题是什么,但是如果您正在分析/读取一个csv文件,或者一个字符串,有类似csv输入,我强烈建议使用一个体面的csv解析器。几乎所有语言都以某种形式存在。


我认为你的图案简短而精确。你可以使用负向前看/向后看,但它们会使情况复杂得多。可维护性很重要。


看这里,长相的埃多克斯1〔0〕。

  • (?=pattern)是一个积极的前瞻性断言。
  • (?!pattern)是一种消极的前瞻性断言。
  • (?<=pattern)是一个积极的背后观点。
  • (?是一个否定的背后论断。

http://www.regular-expressions.info/lookaround.html工作演示