匹配字符串中的最后一个数字
我想在一个字符串中找到最后的数字,比如在
3.1 General definitions 34
这个例子中找到“34”。
我使用的是类似Python的正则表达式,试过了:
(.*?)(\d)
这样我就可以用 \1 来指代“3.1 General definitions”,用 \2 来指代“34”。
但是 \2 匹配到的是“4”,而不是“34”。那我该怎么做呢?
谢谢!
3 个回答
3
你可以试试:
(.+?)(\d+$)
这样做会给你:
>>> r.groups()
(u'3.1 General definitions ', u'34')
你需要在一开始就让它变得贪心一些。
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')
我认为正确的做法: 新的:如果这个字符串不是以数字结尾,我会这样做:
>>> re.match(r'(.*)(?<=\D)(\d+)', '3.1 General definitions 34 more text').groups()
('3.1 General definitions ', '34')
.*
需要贪婪地匹配,以获取你想要的字符串开头,但我们不能让它把 34
的第一个数字也匹配上,所以我们提供了 (?<=\D)
,这是一个向后查看的断言,用来防止这种情况发生。
12
你现在只是在匹配一个数字。试试
(.*?)(\d+)
去匹配至少一个数字。这应该就够了,因为你已经把匹配的第一部分设置为不贪婪模式了。
根据你是怎么进行匹配的,你可能需要在最后加一个“字符串结束”的标记($),这样可以确保它不会匹配到字符串开头的数字。