1

我正在尝试从如下所示的字符串中获取名称和数字:

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)

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

4

2 回答 2

3

.*默认情况下是贪婪的 - 将该选择器更改为.*?导致非贪婪匹配器:

>>> re.findall('<span>([a-zA-Z]+)</span>(.*?)([0-9]+)',string)
[('Name', '</p><div class="info"><span>', '100')]
于 2013-07-31T01:52:24.230 回答
1

因为“。” 正在获取一些数字。

你可以试试这个instread

“([a-zA-Z]+)(\\D*)([\\d]+)”

注意:我不知道您是否需要转义“\”。

于 2013-07-31T01:53:09.167 回答