正则表达式匹配最后一次出现

时间:2014-02-17 06:40:11

标签: python regex

我正试图找到除了这两个之外的方法:

# match last occurence of \d+, 24242 in this case
>>> test = "123_4242_24242lj.:"
>>> obj = re.search(r"\d+(?!.*\d)", test)
>>> obj.group()
'24242'
>>> re.findall(r"\d+", test)[-1]
'24242'

3 个答案:

答案 0 :(得分:2)

我相信你可以找到更多聪明的正则表达式来做到这一点,但我认为你应该坚持使用findall()

正则表达式难以阅读。不仅仅是其他人:自从你写一篇文章以来,让我们过去10天,你会发现它也很难阅读。这使得它们难以维护。

除非性能至关重要,否则最好尽量减少正则表达式所做的工作。这条线......

re.findall(r"\d+", test)[-1]

......干净,简洁,立即显而易见。

答案 1 :(得分:1)

这个基于前瞻性的正则表达式匹配字符串中的最后一位数字:

\d+(?=\D*$)

答案 2 :(得分:1)

  

我正试图找到除了这两个之外的方法:

对您的第一种方法稍作修改。捕获数字,然后是字符串末尾不是数字的任何内容。

>>> import re
>>> test = "123_4242_24242lj.:"
>>> print re.findall(r'(\d+)\D*$', test)
['24242']
>>>

另一个替代方案是替换

>>> re.sub(r'.*?(\d+)\D*$', "\\1", test)
'24242'