我有这样的文字:
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**
关于如何制作此正则表达式的任何想法?
答案 0 :(得分:5)
您可以使用此正则表达式:
\ba{3}\b
\b
表示字边界。a{3}
表示完全匹配a
次\ba{3}\b
表示匹配由字边界包围的3 a,因此aaaa
或aaab
将不匹配。答案 1 :(得分:1)
我假设你也想要抓住aaa,如果它是空间之外的序列的一部分,例如。
aaabbccaabccaccbbbaaaccbbaaaaccbbaacccaaab
^^^ ^^^ ^^^
在这种情况下,负面看起来是最好的选择:
re.findall('(?<!a)aaa(?!a)', mystring)
(?<!a)
表示“前面没有a
”。
aaa
与您的三个a
匹配。
(?!a)
表示“未跟a
”。
因此,上述内容仅匹配aaa
,而不是在匹配的三个之前或之后直接匹配a
。