0

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

4

4 回答 4

7

这将在这种情况下工作:\d+\.\d+(?=\D*$)

当整个字符串中没有其他人跟随它时,它将抓取最后一个数字。

演示+说明:http ://regex101.com/r/hE0lE4

于 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'

这是在 Perl 中定期完成的

于 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 回答