奇怪的结果来自python中的正则表达式

时间:2017-09-25 07:53:57

标签: python regex

我有一个字符串' 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')

这个结果看起来很奇怪,任何人都有任何线索?

1 个答案:

答案 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正则表达式的一个例子。