Python Regex在第一个"|"后停止 比赛

fir*_*ter 3 python regex

p = re.compile("[AG].{2}[ATG|ATA|AAG].{1}G")
regex_result = p.search('ZZZAXXATGXGZZZ')
regex_result.group()
'AXXATG'
Run Code Online (Sandbox Code Playgroud)

我期待的是AXXATGXG.

Wik*_*żew 6

在替代方案周围使用分组构造(...)而不是字符类[...]:

p = re.compile("[AG].{2}(?:ATG|ATA|AAG).G")
                        ^^^^^^^^^^^^^^^  
Run Code Online (Sandbox Code Playgroud)

(?:ATG|ATA|AAG)比赛3个序列:要么是ATG,或ATAAAG.的[ATG|ATA|AAG]字符类匹配1块炭,无论是A,T,G|.

请注意,这{1}是多余的,可以删除.

蟒蛇:

import re
p = re.compile("[AG].{2}(?:ATG|ATA|AAG).G")
regex_result = p.search('ZZZAXXATGXGZZZ')
print(regex_result.group())
# => AXXATGXG
Run Code Online (Sandbox Code Playgroud)

请参阅IDEONE演示