Python 匹配字符串中的最后一个数字
我试图匹配字符串中的最后一个数字,例如 3.1一般定义34 我正在使用Python风格的正则表达式,我已经尝试过:Python 匹配字符串中的最后一个数字,python,regex,Python,Regex,我试图匹配字符串中的最后一个数字,例如 3.1一般定义34 我正在使用Python风格的正则表达式,我已经尝试过: (.*?)(\d) 因此,稍后我可以使用\1来引用“3.1一般定义”,使用\2来引用“34” 但是\2匹配“4”而不是“34”。那我该怎么办 谢谢和问候 您当前只匹配一个位数。试一试 (.*?)(\d+) 匹配至少一个数字。这应该是你所需要的,因为你已经让比赛的第一部分变得不情愿(不贪婪) 根据您执行匹配的方式,您可能需要在末尾添加一个“字符串末尾”锚($),以确保它与字符串开
(.*?)(\d)
因此,稍后我可以使用\1来引用“3.1一般定义”,使用\2来引用“34”
但是\2匹配“4”而不是“34”。那我该怎么办
谢谢和问候 您当前只匹配一个位数。试一试
(.*?)(\d+)
匹配至少一个数字。这应该是你所需要的,因为你已经让比赛的第一部分变得不情愿(不贪婪)
根据您执行匹配的方式,您可能需要在末尾添加一个“字符串末尾”锚($),以确保它与字符串开头的数字不匹配。您最初的方法:
>>> re.match(r'(.*?)(\d)', '3.1 General definitions 34').groups()
('', '3')
Jon Skeet的回答(编辑:我忘了加入Jon关于锚定到字符串末尾的建议,示例现在已更正):
我认为是正确的:新建:如果字符串没有以数字结尾,我会这样做:
>>> re.match(r'(.*)(?<=\D)(\d+)', '3.1 General definitions 34 more text').groups()
('3.1 General definitions ', '34')
>>re.match(r'(.*)(?您可以尝试:
(.+?)(\d+$)
因为它会给你:
>>> r.groups()
(u'3.1 General definitions ', u'34')
你需要一开始就让它变得贪婪。Yes,.*?表示不贪婪地(不情愿地)匹配任何字符零次或多次。@RobertB:Yes,刚刚找到Python手册中的那一部分。但发现了另一个潜在问题:)也许我误解了他的要求,但他说他想匹配字符串中的最后一个数字。他没有说他的字符串以数字结尾(尽管他的例子确实是这样)。如果我对问题的理解是正确的,那么你的答案是错误的。否则,锚定到字符串结尾是有效的。@Steven:这一点很好。我从现有的正则表达式尝试中推断出。如果我对问题的理解是正确的,我的答案将暂时保持不变。如果字符串始终以nu结尾,这一点是有效的成员。@Steven:OP说字符串确实总是以数字结尾。这对我来说似乎是最好的答案。@Alan:我最终投票支持Jon Skeet的答案,因为他的答案最先发布。他们都是很好的答案。Jon的答案更为冗长,但通过提供更多的解释来弥补。berni的答案更为简洁。平局打破者进入了第一站d、 您说过要匹配字符串中的最后一个数字。字符串是否总是以数字结尾?是否要匹配此字符串中的数字88
“12个苹果88个橙子”
?@Steven:我的字符串总是以数字结尾。
>>> r.groups()
(u'3.1 General definitions ', u'34')