正则表达式:如何匹配具有“'”三次的模式?

时间:2012-12-25 20:03:46

标签: regex

我想匹配以下模式:'''abc'''。但是文档中有一些像''''''abc'''这样的噪音。我只想要前面有三个" ' "的单词。我试过了" [^']'''[^'] "。但它不起作用。正则表达式" '{3} "将匹配三个以上" ' "

那么有人可以帮助我吗?

3 个答案:

答案 0 :(得分:3)

(?<!')'{3}(?!')

如果支持,则使用否定前瞻(和lookbehind)。

修改:假设您要与'''中的'''abc'''匹配,因为这是您的问题所暗示的。如有不同,请注明。

答案 1 :(得分:2)

你基本上已经自己提供了解决方案。如果你想匹配被3 '正好包围的字符串,那么这样做(我的例子使用Python):

In [33]: re.findall("'{3}\w+'{3}", "'''abc'''")
Out[33]: ["'''abc'''"]

如果你想避免那些前面超过3 '的字符串,那么你最好采取负面的后瞻性断言(?<!...)

In [59]: re.findall("(?<!')'{3}\w+'{3}", "'''abc'''")
Out[59]: ["'''abc'''"]

In [60]: re.findall("(?<!')'{3}\w+'{3}", "''''''''''abc'''")
Out[60]: []

In [62]: re.findall("(?<!')'{3}\w+'{3}", "'''abc''''''''''")
Out[62]: ["'''abc'''"]

如果您还想避免超过3 '成功的字符串,请添加否定前瞻声明(?!...)

In [63]: re.findall("(?<!')'{3}\w+'{3}(?!')", "'''abc'''")
Out[63]: ["'''abc'''"]

In [64]: re.findall("(?<!')'{3}\w+'{3}(?!')", "''''''''''abc'''")
Out[64]: []

In [65]: re.findall("(?<!')'{3}\w+'{3}(?!')", "'''abc''''''''''")
Out[65]: []

注意:这取决于您的编程语言是否支持前瞻和后视。如果是这样,这是实现目标的最佳方式。

答案 2 :(得分:0)

尝试^[^']*'{3}[^']+'{3}[^']*$之类的内容。请注意中间的[^']+,因为你还需要告诉它两边的三个''之间有什么东西。