连续模式的正则表达式

时间:2013-10-31 18:45:29

标签: regex

我有这样的文字:

a aa aaa aaa aaaa aa aaa

我需要捕获文本中的所有aaa序列,但如果连续有四行,则忽略它们,例如aaaa。在理想的情况下,我将能够发现这一点:

a aa **aaa**  **aaa** aaaa aa **aaa**

目前我有这个正则表达式:

[^a]aaa[^a]

这适用于第一个和最后一个序列'aaa',但它无法捕获第二个序列,因为aaa aaa之间的空格属于第一个模式。

a aa **aaa**  aaa aaaa aa **aaa**

关于如何制作此正则表达式的任何想法?

2 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式:

\ba{3}\b
  • 此处\b表示字边界。
  • a{3}表示完全匹配a
  • \ba{3}\b表示匹配由字边界包围的3 a,因此aaaaaaab将不匹配。

答案 1 :(得分:1)

我假设你也想要抓住aaa,如果它是空间之外的序列的一部分,例如。

aaabbccaabccaccbbbaaaccbbaaaaccbbaacccaaab
^^^               ^^^                 ^^^  

在这种情况下,负面看起来是最好的选择:

re.findall('(?<!a)aaa(?!a)', mystring)

(?<!a)表示“前面没有a”。

aaa与您的三个a匹配。

(?!a)表示“未跟a”。

因此,上述内容仅匹配aaa,而不是在匹配的三个之前或之后直接匹配a