我只想查找所有字符(A除外),其后是三重A,即,右侧有AAA。我不想在输出中包含三元组A,而只希望AAA之前的字符
result = []
s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
pattern = "r'(\w[BF])(?!AAA)'"
for item in re.finditer(pattern, s):
result.append(item.group())
print(result)
我使用了这种模式r'(\ w [BF])(?! AAA)',但没有用
我只需要在[]中找到这些字母
'ACAABAA[C]AAABACDBADDDFSDDDFFSSSASDA[F]AAAC[B]AAAFASD'
答案 0 :(得分:2)
在您的示例中,您想匹配三元组A左侧的单个字符。使用\w[BF]
匹配至少2个字符,即1个单词字符,后跟B
或F
否定的前瞻断言,右边的不是三连冠A,但是您想要相反的东西。
您可以匹配一个B-Z并断言直接在右边的是AAA
[B-Z](?=AAA)
import re
result = []
s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
pattern = r'[B-Z](?=AAA)'
for item in re.finditer(pattern, s):
result.append(item.group())
print(result)
输出
['C', 'F', 'B']
您也可以使用re.findall
import re
s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
pattern = r'[B-Z](?=AAA)'
result = re.findall(pattern, s)
print(result)
答案 1 :(得分:2)
[^A](?=A{3})
在这里,我使用正向前瞻。
答案 2 :(得分:0)
这是您问题的解决方案:
pattern = "([B-Z]{1})(A{3})"
for item in re.finditer(pattern, s):
result.append(item.group(1))