用Python做正则匹配的时候,发现了一个问题
import re
a='400> 1\n[0011] Thr Leu Asn Ile Glu Asp Glu His Glu Thr Ser Lys Glu\n[0012]'
pattern1=r'400>[^\n]*Asn'
match1=re.findall(pattern1,a)
print(match1) #400> 1\n[0011] Thr Leu Asn
pattern=r'400>[^\n]*Ile'
match=re.findall(pattern,a)
print(match) #[]
当pattern为‘Asn’时,一切正常
当pattern为‘Ile’时,理论上结果应该为400> 1\n[0011] Thr Leu Asn Ile,可结果为[]
经检查,是‘Ile’前面的‘Asn’的问题,也就是说问题出在‘n’上
个人猜测是re包(包括regex包)程序逻辑的问题
将n改成N即可解决这个问题!
____________________________________________________
方法二:
其实[^\n]在正则里和.是一个意思,但是re包没办法直接识别.
所以把[^\n]改成.,再加一个re.DOTALL就可以了