如何在python中以相反的方向搜索正则表达式

时间:2012-12-24 02:03:00

标签: python regex

例如。字符串如下 "cd 1.2 ab 2.3 cd"
如果我使用模式"[0-9]*\.[0-9]*"re.search来查找子字符串。它将返回1.2。我想返回2.3 我怎样才能在相反的方向上进行python搜索。我不喜欢使用findall函数来获取所有子字符串。然后使用最后一个

4 个答案:

答案 0 :(得分:7)

这适用于这种情况:\d+\.\d+(?=\D*$)

当整个字符串中没有其他数字时,它会抓取最后的数字。

演示+解释:http://regex101.com/r/hE0lE4

答案 1 :(得分:0)

使用re.finditer()

In [150]: strs="cd 1.2 ab 2.3 cd"

In [151]: for x in re.finditer(r"\d+\.\d+",strs):pass

In [152]: x.group()
Out[152]: '2.3'

答案 2 :(得分:0)

如果你想要最后一个(或者你愿意匹配模式的最后一个),只需使用最贪婪的.*匹配,直到最后一个感兴趣的模式匹配:

>>> import re
>>> st="cd 1.2 dv 1.4 ab 2.3 cd"
>>> re.match(r'.*(\d\.\d)',st).group(1)
'2.3'

re.findall更灵活,更直接,可能是最快的:

>>> re.findall(r'(\d\.\d)',st)
['1.2', '1.4', '2.3']
>>> re.findall(r'(\d\.\d)',st)[-1]
'2.3'
>>> re.findall(r'(\d\.\d)',st)[-2]
'1.4'

当然,您可以反转字符串,将FIRST匹配与反向正则表达式匹配(如果它不对称),并将结果反转:

>>> re.search(r'(\d\.\d)',st[::-1]).group(1)[::-1]
'2.3'

Which is done regularly in Perl

答案 3 :(得分:0)

   1. re.search('[0-9]*\.[0-9]*',a[::-1]).group()


   2. re.search(r'(\d\.\d)(\s\w+$)',a).group(1)