首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有正则表达式的文件名末尾提取版本号

在带有正则表达式的文件名末尾提取版本号
EN

Stack Overflow用户
提问于 2019-05-23 14:00:46
回答 3查看 1.1K关注 0票数 1

我有一个文件名列表,其中一些以版本号结尾。我试图使用一个正则表达式提取版本号:

代码语言:javascript
复制
filename.doc --> NULL
filename.1.0.doc --> 1.0
filename.2.0.pdf --> 2.0
filename.3.0.docx --> 3.0

到目前为止,我发现以下正则表达式与扩展一起提取它:

代码语言:javascript
复制
[0-9]+\.[0-9]+\.(docx|pdf|rtf|doc|docm)$

但我不想分机。所以我搜索的是在字符串中最后一个点出现之前的[0-9]+\.[0-9]+,但是我找不到怎么做。

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-23 14:10:46

我正在搜索的是在字符串中最后一个点出现之前的[0-9]+\.[0-9]+

你可以用

代码语言:javascript
复制
r'[0-9]+\.[0-9]+(?=\.[^.]*$)'

regex演示

详细信息

  • [0-9]+\.[0-9]+ - 1+数字,.和1+数字
  • (?=\.[^.]*$) --一个积极的展望,需要.,然后是0+字符,而不是.,字符串的结尾就在当前位置的右侧。

正则图

票数 1
EN

Stack Overflow用户

发布于 2019-05-23 14:05:12

Python有命名群

一个更重要的特性是命名组:而不是用数字来引用它们,而是可以用名称来引用组。 命名组的语法是Python特定的扩展之一:(?P.)。很明显,名字是这个团体的名字。命名组的行为与捕获组完全一样,并将名称与组相关联。处理捕获组的match对象方法都接受按数字引用组的整数或包含所需组名称的字符串。命名组仍然有编号,因此可以通过两种方式检索有关组的信息:P= re.compile(r'(?P\b\w+\b)') >> m= p.search(大量标点符号) >> m.group('word')‘>>’>> m.group(1) ' Lots‘

因此,在您的示例中,您可以将regex修改为:

(?P<version>[0-9]+\.[0-9]+)\.(docx|pdf|rtf|doc|docm)$

和使用:

found.group('version')

若要从找到的regex匹配中选择版本,请执行以下操作。

票数 0
EN

Stack Overflow用户

发布于 2019-05-23 14:07:09

试试这个-

代码语言:javascript
复制
import re

try:
    version = [float(s) for s in re.findall(r'-?\d+\.?\d*', 'filename.1.0.doc')][0]
    print(version)
except:
    pass

在这里,如果它有一个数字,那么它将存储在变量版本中,否则它将传递。

这应该有效!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56276966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档