我正在尝试通过 python 正则表达式从字符串中获取版本号...
给定文件名:facter-1.6.2.tar.gz
当,在循环内:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
如何将 1.6.2 位转换为版本
最佳答案
两个逻辑问题:
1) 因为你只想要 1.6.2 部分,你不想在第一个 \d
之前捕获 .*
部分,所以它在外面括号。
2) 由于您只想匹配有问题的模式并使用 re. 拆分 没有意义。相反,请使用 re.match
。这将为您提供一个 Match 对象,您可以使用它的 .group()
方法来获取实际匹配的文本。 “group 0”是整个匹配模式,“group 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'
关于Python 正则表达式 re.compile() 匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012320/