繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM