首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Regex表达式与最后一个数字组件匹配,但不包括文件扩展名。

Regex表达式与最后一个数字组件匹配,但不包括文件扩展名。
EN

Stack Overflow用户
提问于 2022-02-12 06:13:58
回答 3查看 150关注 0票数 0

我很难想出一个正则表达式。给定一个文件路径,我需要匹配路径的最后一个数字部分(图像序列中的“框架”号),但也需要忽略文件扩展名中的任何数字组件。

例如,给定路径:

/path/to/file/abc123/GCAM5423.xmp

下面的表达式将正确匹配5423

((?P<index>(?P<padding>0*)\d+)(?!.*(0*)\d+))

但是,如果文件扩展名包含如下数字,则此表达式将失败:

/path/to/file/abc123/GCAM5423.cr2

在这种情况下,表达式将匹配文件扩展名中的2,而我仍然需要它来匹配5423。如何修改上述表达式以忽略具有数字组件的文件扩展名?

使用蟒蛇味的regex。提前感谢!

编辑:谢谢大家的帮助!为了澄清,我特别需要修改上面的表达式,以便只捕获最后一个组。我将此模式传递给外部库,因此它需要包含指定的组,并且只匹配扩展之前的最后一个数字。

EN

回答 3

Stack Overflow用户

发布于 2022-02-12 06:25:21

你可以试试这个:

\/[a-zA-Z]*(\d*)\.[a-zA-Z0-9]{3,4}$

票数 1
EN

Stack Overflow用户

发布于 2022-02-12 08:12:02

尝试以下模式:\/[^/\d\s]+(\d+)\.[^/]+$

见Regex 演示

代码:

代码语言:javascript
代码运行次数:0
运行
复制
import re

pattern = r"\/[^/\d\s]+(\d+)\.[^/]+$"

texts = ['/path/to/file/abc123/GCAM5423.xmp', '/path/to/file/abc123/GCAM5423.cr2']

print([match.group(1) for x in texts if (match := re.search(pattern, x))])

输出:

['5423', '5423']

票数 1
EN

Stack Overflow用户

发布于 2022-02-12 06:35:53

Step1:在最后一个点之前找到子字符串。

代码语言:javascript
代码运行次数:0
运行
复制
(.*)\.

输入:/path/to/file/abc123/GCAM5423.cr2

输出:/path/to/file/abc123/GCAM5423

Step2:使用正则表达式查找最后一个数字。

输入:/path/to/file/abc123/GCAM5423

输出:5423

我不知道怎么加入这两个雷克斯,但这对你也有好处。我的hopes^_^

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

https://stackoverflow.com/questions/71089435

复制
相关文章

相似问题

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