Python 正则表达式 re.compile() 匹配字符串

标签 python regex

我正在尝试通过 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/

相关文章:

c# - 正则表达式匹配任何内容,包括换行符

python - 如何否定 Pandas 替换的正则表达式

Python:正则表达式搜索

c++ - 使用正则表达式解析字符串

python - 为什么 Python 的 itertools.permutations 包含重复项? (当原始列表有重复时)

python - 检查字符串末尾是否包含子字符串

python - 使用 tcp 重传的可靠 udp

javascript - 正则表达式匹配单词但不匹配反引号内

python - 在 python 3 中,使用较短的回溯重新引发错误

Python int 太大,无法转换为 C int