例如。字符串如下
"cd 1.2 ab 2.3 cd"
。
如果我使用 pattern "[0-9]*\.[0-9]*"
,并re.search
找到子字符串。它会返回1.2
。我想回来2.3
。
我怎样才能让 python 搜索相反的方向。我不喜欢使用findall
函数来获取所有子字符串。然后使用最后一个
问问题
2487 次
4 回答
7
于 2012-12-24T02:05:03.417 回答
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'
于 2012-12-24T02:13:49.637 回答
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'
于 2012-12-24T02:43:14.713 回答
0
1. re.search('[0-9]*\.[0-9]*',a[::-1]).group()
2. re.search(r'(\d\.\d)(\s\w+$)',a).group(1)
于 2012-12-24T17:50:19.510 回答