如何解决匹配字符串中的最后一个数字
| 我正在尝试匹配字符串中的最后一个数字,例如中的\“ 34 \” 3.1通用定义34 我正在使用Python风格的正则表达式,并且尝试了:(.*?)(\\d)
这样以后我就可以用\\ 1来引用\“ 3.1常规定义\”,而\\ 2来引用\“ 34 \”。
但是\\ 2匹配\“ 4 \”而不是\“ 34 \”。那我该怎么办?
谢谢并恭祝安康!
解决方法
您目前只匹配一位数字。尝试
(.*?)(\\d+)
至少匹配一位数字。这应该是您所需要的,因为您已经使比赛的第一部分不愿意(非贪婪)。
根据您执行匹配的方式,您可能需要在末尾使用“字符串结尾”锚($),以确保它与字符串开头的数字不匹配。
,您的原始方法:
>>> re.match(r\'(.*?)(\\d)\',\'3.1 General definitions 34\').groups()
(\'\',\'3\')
乔恩·斯凯特(Jon Skeet)的答案(编辑:我忘了灌输乔恩关于将锚定到字符串末尾的建议,现在示例已更正):
>>> 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\')
.*
需要贪婪才能获取所需的字符串的开头,但是我们不能让它入ѭ6first的第一位,因此我们提供了(?<=\\D)
,这是一个后置断言,可以阻止它发生
,您可以尝试:
(.+?)(\\d+$)
因为它将给你:
>>> r.groups()
(u\'3.1 General definitions \',u\'34\')
您需要从一开始就让它变得贪婪。