[英]regex match last occurrence
我试图找到除了这两个之外的方法:
# 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'
我相信你可以找到更多聪明的正则表达式来做到这一点,但我认为你应该坚持使用findall()
。
正则表达式很难阅读。 不仅仅是其他人:自从你写一篇文章以来,让我们过去10天,你会发现它也很难阅读。 这使得它们难以维护。
除非性能至关重要,否则最好尽量减少正则表达式所做的工作。 这条线......
re.findall(r"\d+", test)[-1]
......干净,简洁,立即显而易见。
这个基于前瞻性的正则表达式匹配字符串中的最后一位数字:
\d+(?=\D*$)
我试图找到除了这两个之外的方法:
对您的第一种方法稍作修改。 捕获数字,然后是字符串末尾不是数字的任何数字。
>>> import re
>>> test = "123_4242_24242lj.:"
>>> print re.findall(r'(\d+)\D*$', test)
['24242']
>>>
另一种替代方案是替代 :
>>> re.sub(r'.*?(\d+)\D*$', "\\1", test)
'24242'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.