正则表达式在条件Python之前查找特定字母

时间:2020-10-05 07:27:33

标签: python regex

我只想查找所有字符(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'

3 个答案:

答案 0 :(得分:2)

在您的示例中,您想匹配三元组A左侧的单个字符。使用\w[BF]匹配至少2个字符,即1个单词字符,后跟BF

否定的前瞻断言,右边的不是三连冠A,但是您想要相反的东西。

您可以匹配一个B-Z并断言直接在右边的是AAA

[B-Z](?=AAA)

Regex demo | Python demo

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)

Python demo

答案 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))
相关问题