例如。字符串如下
"cd 1.2 ab 2.3 cd"
。
如果我使用模式"[0-9]*\.[0-9]*"
和re.search
来查找子字符串。它将返回1.2
。我想返回2.3
我怎样才能在相反的方向上进行python搜索。我不喜欢使用findall
函数来获取所有子字符串。然后使用最后一个
答案 0 :(得分:7)
答案 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'
答案 3 :(得分:0)
1. re.search('[0-9]*\.[0-9]*',a[::-1]).group()
2. re.search(r'(\d\.\d)(\s\w+$)',a).group(1)