匹配字符串中的最后一个数字

时间:2011-05-25 16:30:58

标签: python regex

我试图匹配字符串中的最后一个数字,例如

中的“34”
  

3.1一般定义34

我正在使用Python风格的正则表达式,我尝试过:

(.*?)(\d)

以便稍后我可以使用\ 1来引用“3.1 General definitions”和\ 2来引用“34”。

但是\ 2匹配“4”而不是“34”。那我该怎么办?

谢谢和问候!

3 个答案:

答案 0 :(得分:12)

您目前只匹配一位数字。尝试

(.*?)(\d+)

匹配至少一位数。这应该是你所需要的,因为你已经让比赛的第一部分不情愿(非贪婪)。

根据您执行匹配的方式,可能最后需要一个“字符串结尾”锚点($),以确保它与开头的数字不匹配字符串。

答案 1 :(得分:4)

您最初的方法:

>>> re.match(r'(.*?)(\d)', '3.1 General definitions 34').groups()
('', '3')

Jon Skeet的回答(编辑:我忘了将Jon的建议隐藏到字符串的结尾,示例现已更正):

>>> re.match(r'(.*?)(\d+$)', '3.1 General definitions 34').groups()
('3.1 General definitions ', '34')

我认为是正确的: new:如果字符串不结尾,我会这样做:

>>> re.match(r'(.*)(?<=\D)(\d+)', '3.1 General definitions 34 more text').groups()
('3.1 General definitions ', '34')

.*需要贪婪地获取你想要的字符串的开头,但是我们不能让它悄悄地抬起34的第一个数字,所以我们提供(?<=\D),一个看守的断言,阻止它发生

答案 2 :(得分:3)

你可以尝试:

(.+?)(\d+$)

因为它会给你:

>>> r.groups()
(u'3.1 General definitions ', u'34')

你需要在开始时让它变得贪婪。