0

我有这段文字:

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**

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

4

2 回答 2

5

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

\ba{3}\b
  • 这里\b的意思是单词边界。
  • a{3}表示完全匹配a时间
  • \ba{3}\b表示匹配被单词边界包围的 3 个 a,因此aaaaaaab不会匹配。
于 2013-10-31T18:47:30.417 回答
1

我假设你也想捕捉 aaa 如果它是空间之外的序列的一部分,例如

aaabbccaabccaccbbbaaaccbbaaaaccbbaacccaaab
^^^               ^^^                 ^^^  

在这种情况下,消极的环顾将是你最好的选择:

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

(?<!a)意思是“前面没有a”。

aaa匹配你的三个as。

(?!a)意思是“后面没有a”。

因此,上述仅在匹配三个之前或之后直接匹配aaa而没有任何附加s。a

于 2013-10-31T23:01:26.080 回答