0

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

那么有人可以帮助我吗?

4

3 回答 3

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

如果支持,请使用负前瞻(和后瞻)。

编辑:假设您想匹配'''from '''abc''',因为这就是您的问题所暗示的。如有不同,请注明。

于 2012-12-25T20:05:13.787 回答
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]: []

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

于 2012-12-25T20:10:37.270 回答
0

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

于 2012-12-25T20:09:34.990 回答