正则表达式没有得到所有数字

时间:2013-07-31 01:48:50

标签: python regex

我正在尝试从字符串中获取名称和数字:

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)

但是,为什么第一个正则表达式没有得到所有数字?

2 个答案:

答案 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] +)”

注意:我不知道你是否需要逃避“\”。

相关问题