我希望能够操作这个正则表达式的结果,并将其匹配到组中,以便我可以操作它。我得到一个错误,说:
AttributeError: 'list' object has no attribute 'group'
我的代码如下:
sampleText= 'LOC OL85M132 LOC OL3M051'
matchLOC=re.findall(r'(LOC)s([^Wd_]{2})(d+)M(d{3})',sampleText)
for i in matchLOC:
print(i)
我的结果是:
('LOC', 'OL', '85', '132')
('LOC', 'OL', '3', '051')
这很好,但是当我尝试将组分配给变量时,如:
MP=matchLoc.group(2)
Yards=matchLoc.group(3)
我得到了上面的错误。我想:
1)将第三组赋值给变量'MP'
2)将第四组赋值给变量'Yards'
从这里开始,我想做一系列的操作。例如,将数字0添加到最后一个数字的末尾,以及if-else循环,例如
if Yards >= 130:
print('Yards = ' + str(int(Yards)-100))
print('MP = ' + str(int(MP) + 0.5))
如何使用re.finditer
:
import re
sampleText= 'LOC OL85M132 LOC OL3M051'
for m in re.finditer(r'(LOC)s([^Wd_]{2})(d+)M(d{3})',sampleText):
#print (m.group(3) + " : " + m.group(4))
MP = int(m.group(3))
Yards = int(m.group(4))
if Yards >= 130:
print('Yards = ' + str(Yards-100))
print('MP = ' + str(MP + 0.5))
参见IDEONE demo
我没有修改你的正则表达式,但我认为没有必要捕获(LOC)
,因为它是已知的文本。注意,修改捕获组时,您将移动组id,并且需要修改整个代码。
re.finall():
返回字符串中所有非重叠匹配项的列表。
你可能需要:
for _, _, mp, yards in matchLOC:
yards = int(yards)
if yards >= 130:
...