我想匹配以下模式:'''abc'''
。但是文档中有一些像''''''abc'''
这样的噪音。我只想要前面有三个" ' "
的单词。我试过了" [^']'''[^'] "
。但它不起作用。正则表达式" '{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}[^']*$
之类的内容。请注意中间的[^']+
,因为你还需要告诉它两边的三个''之间有什么东西。