我正在尝试从字符串中获取名称和数字:
string = '><span>Name</span></p><div class="info"><span>100 years old<'
事情是以下模式没有得到所有数字:
re.findall('<span>([a-zA-Z]+)</span>(.*)([0-9]+)',string)
相反,它返回数字组中的最后一个数字(来自'0'上方的示例)
[('Name','</p><div class="info"><span>10','0')]
我希望它返回[('Name','</p><div class="info"><span>','100')]
我知道我可以执行以下操作来使其正常工作。
re.findall('<span>([a-zA-Z]+)</span>(.*)>([0-9]+)',string)
但是,为什么第一个正则表达式没有得到所有数字?
答案 0 :(得分:3)
.*
为greedy - 将该选择器更改为.*?
会导致非贪婪的匹配器:
>>> re.findall('<span>([a-zA-Z]+)</span>(.*?)([0-9]+)',string)
[('Name', '</p><div class="info"><span>', '100')]
答案 1 :(得分:1)
因为“。”得到了一些数字。
你可以尝试这个instread
“([A-ZA-Z] +)(\\ d *)([\\ d] +)”
注意:我不知道你是否需要逃避“\”。