我有一个字符串' 10H30M2D3I2M10S',并希望将字符串分成3个部分,如[' 10H',' 20M2D3I2M',' ; 10S'],我写了一个如下的python正则表达式,
import re
cigar = '10H30M2D2N2=2X3I2M10S'
pattern = re.compile(r'(\d+[HS])*((\d+[MIDNP=X])+)(\d+[HS])*')
r = pattern.search(cigar)
print(r.groups())
结果是(' 10H',' 30M2D2N2 = 2X3I2M',' 2M',' 10S')
这个结果看起来很奇怪,任何人都有任何线索?
答案 0 :(得分:0)
编辑重写,因为我之前的回答是完全错误的......
你很接近,但你需要让你的内部小组\d+[MIDNP=X]
无法捕获:
pattern = re.compile(r'(\d+[HS])*((?:\d+[MIDNP=X])+)(\d+[HS])*')
这将只给你3组,第二组覆盖整个内部字符串。否则,你的代码拥有它的方式,你有一个额外的捕获组,只捕获最后一个。我之前提出的方式((\d+[HS])*(\d+[MIDNP=X])+(\d+[HS])*
)不会为您提供从+
捕获所有内容的捕获组。
Here是工作python正则表达式的一个例子。