提问人:opnightfall1771 提问时间:2/12/2022 最后编辑:opnightfall1771 更新时间:2/12/2022 访问量:299
正则表达式以匹配最后一个数值分量,但排除文件扩展名
Regex expression to match last numerical component, but exclude file extension
问:
我在试图找出正则表达式时遇到了困难。给定一个文件路径,我需要匹配路径的最后一个数字分量(图像序列中的“帧”编号),但也要忽略文件扩展名中的任何数字分量。
例如,给定的路径:
/path/to/file/abc123/GCAM5423.xmp
以下表达式将正确匹配 。5423
((?P<index>(?P<padding>0*)\d+)(?!.*(0*)\d+))
但是,如果例如,文件扩展名包含如下所示的数字,则此表达式将失败:
/path/to/file/abc123/GCAM5423.cr2
在这种情况下,表达式将与文件扩展名中的表达式匹配,而我仍然需要它来匹配.如何修改上述表达式以忽略具有数值成分的文件扩展名?2
5423
使用正则表达式的 python 风格。提前致谢!
编辑:谢谢大家的帮助!为了澄清,我特别需要修改上面的表达式以仅捕获最后一组。我将此模式传递给外部库,因此它需要包含命名组,并且仅匹配扩展之前的最后一个数字。
答:
你可以试试这个:
\/[a-zA-Z]*(\d*)\.[a-zA-Z0-9]{3,4}$
Step1:在最后一个点之前找到子字符串。
(.*)\.
输入:/path/to/file/abc123/GCAM5423.cr2
输出:/path/to/file/abc123/GCAM5423
第2步:使用正则表达式查找最后一个数字。
输入:/path/to/file/abc123/GCAM5423
输出:5423
我不知道如何加入这两个正则表达式,但它对你也很有用。我的希望^_^
请尝试以下模式:\/[^/\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']
评论