Python 使用正则表达式提取文件名末尾的版本号
我有一个文件名列表,其中一些文件名以版本号结尾。我正在尝试使用单个正则表达式提取版本号:Python 使用正则表达式提取文件名末尾的版本号,python,regex,string,Python,Regex,String,我有一个文件名列表,其中一些文件名以版本号结尾。我正在尝试使用单个正则表达式提取版本号: filename.doc --> NULL filename.1.0.doc --> 1.0 filename.2.0.pdf --> 2.0 filename.3.0.docx --> 3.0 到目前为止,我发现以下正则表达式将其与扩展一起提取: [0-9]+\.[0-9]+\.(docx | pdf | rtf | doc | docm)$ 但我宁愿不要分机。所以我要搜索的是
filename.doc --> NULL
filename.1.0.doc --> 1.0
filename.2.0.pdf --> 2.0
filename.3.0.docx --> 3.0
到目前为止,我发现以下正则表达式将其与扩展一起提取:
[0-9]+\.[0-9]+\.(docx | pdf | rtf | doc | docm)$
但我宁愿不要分机。所以我要搜索的是字符串中最后一个点出现之前的[0-9]+\[0-9]+
,但我找不到该怎么做
谢谢你的帮助 Python正则表达式具有:
一个更重要的特性是命名组:可以用名称来引用组,而不是用数字来引用它们
命名组的语法是特定于Python的扩展之一:(?p…)。显然,name是组的名称。命名组的行为与捕获组完全相同,并且还将名称与组相关联。处理捕获组的match object方法都接受按数字引用组的整数或包含所需组名称的字符串。命名组仍然是给定的数字,因此您可以通过两种方式检索有关组的信息:
>> p = re.compile(r'(?P<word>\b\w+\b)')
>> m = p.search( '(((( Lots of punctuation )))' )
>> m.group('word')
'Lots'
>> m.group(1)
'Lots'
p=re.compile(r'(?p\b\w+\b))
>>m=p.search(“((大量标点))”)
>>m.group(‘单词’)
“很多”
>>m组(1)
“很多”
因此,在您的情况下,您可以将正则表达式修改为:
(?p[0-9]+\[0-9]+)\(docx | pdf | rtf | doc | docm)$
和使用:
found.group('version')
要从找到的正则表达式匹配项中选择版本,请尝试此操作-
import re
try:
version = [float(s) for s in re.findall(r'-?\d+\.?\d*', 'filename.1.0.doc')][0]
print(version)
except:
pass
在这里,如果它有一个数字,那么它将把它存储在变量版本中,否则它将通过
这应该管用!:)
我搜索的是字符串中最后一个点之前的[0-9]+\[0-9]+
你可以用
r'[0-9]+\.[0-9]+(?=\.[^.]*$)'
看
详细信息
-1+位、[0-9]+\[0-9]+
和1+位
-一个正向前瞻,需要(?=\..[^.]*$)
,然后是0个字符,而不是
,并且字符串的结尾紧靠当前位置的右侧
您可以使用
r'[0-9]+\.[0-9]+(?=\...^.]*$)'