正则表达式以匹配最后一个数值分量,但排除文件扩展名

Regex expression to match last numerical component, but exclude file extension

提问人:opnightfall1771 提问时间:2/12/2022 最后编辑:opnightfall1771 更新时间:2/12/2022 访问量:299

问:

我在试图找出正则表达式时遇到了困难。给定一个文件路径,我需要匹配路径的最后一个数字分量(图像序列中的“帧”编号),但也要忽略文件扩展名中的任何数字分量。

例如,给定的路径:

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

以下表达式将正确匹配 。5423

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

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

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

在这种情况下,表达式将与文件扩展名中的表达式匹配,而我仍然需要它来匹配.如何修改上述表达式以忽略具有数值成分的文件扩展名?25423

使用正则表达式的 python 风格。提前致谢!

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

Python 正则表达式

评论

0赞 BrenBarn 2/12/2022
是否保证文件具有扩展名?如果是这样,您可以只在数字后面寻找一个句点。
0赞 opnightfall1771 2/12/2022
是的,可以安全地依靠扩展。关于如何修改上述模式以寻找周期的任何建议?

答:

1赞 OnY 2/12/2022 #1

你可以试试这个:
\/[a-zA-Z]*(\d*)\.[a-zA-Z0-9]{3,4}$

0赞 navylover 2/12/2022 #2

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

(.*)\.

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

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

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

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

输出:5423

我不知道如何加入这两个正则表达式,但它对你也很有用。我的希望^_^

1赞 Alireza 2/12/2022 #3

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

查看正则表达式演示

法典:

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']