我试图通过python regex从字符串中获取版本号...
给定文件名:facter-1.6.2.tar.gz
当在循环内部时:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
如何将1.6.2位转换为版本
答案 0 :(得分:2)
match = re.search(r'\d\.\d\.\d', sfile)
if match:
version = match.group()
答案 1 :(得分:2)
两个逻辑问题:
1)由于您只需要1.6.2部分,因此您不希望在第一个.*
之前捕获\d
部分,因此它不在括号内。
2)因为您只想匹配有问题的模式并使用re获取它。 split 毫无意义。相反,请使用re.match
。这将为您提供Match对象,您可以使用其.group()
方法获取实际匹配的文本。 “组0”是整个匹配的模式,“组1”是与第一组括号内的东西匹配的东西等。
>>> re.match('.*(\d\.\d\.\d)', 'factor-1.6.2.tar.gz').group(1)
'1.6.2'
虽然正如另一个答案所示,但实际上匹配.*
部分毫无意义,因为我们可以搜索来查找仅包含我们想要的部分的字符串。这将在字符串中的任何位置查找模式(匹配期望它在开头)。由于我们不需要括号来使模式在逻辑上起作用,并且因为我们现在将使用整个匹配部分,所以我们也不再需要括号。
>>> re.search('\d\.\d\.\d', 'factor-1.6.2.tar.gz').group(0)
'1.6.2'
答案 2 :(得分:0)
>>> re.search(r"\d+(\.\d+)+", sfile).group(0)
'1.6.2'