我正试图找到除了这两个之外的方法:
# 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'
答案 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'