Python regex re.compile()匹配字符串

时间:2011-11-04 16:11:42

标签: python regex

我试图通过python regex从字符串中获取版本号...

给定文件名:facter-1.6.2.tar.gz

当在循环内部时:

import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version

如何将1.6.2位转换为版本

3 个答案:

答案 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'