我很难想出一个正则表达式。给定一个文件路径,我需要匹配路径的最后一个数字部分(图像序列中的“框架”号),但也需要忽略文件扩展名中的任何数字组件。
例如,给定路径:
/path/to/file/abc123/GCAM5423.xmp
下面的表达式将正确匹配5423
。
((?P<index>(?P<padding>0*)\d+)(?!.*(0*)\d+))
但是,如果文件扩展名包含如下数字,则此表达式将失败:
/path/to/file/abc123/GCAM5423.cr2
在这种情况下,表达式将匹配文件扩展名中的2
,而我仍然需要它来匹配5423
。如何修改上述表达式以忽略具有数字组件的文件扩展名?
使用蟒蛇味的regex。提前感谢!
编辑:谢谢大家的帮助!为了澄清,我特别需要修改上面的表达式,以便只捕获最后一个组。我将此模式传递给外部库,因此它需要包含指定的组,并且只匹配扩展之前的最后一个数字。
发布于 2022-02-11 22:25:21
你可以试试这个:
\/[a-zA-Z]*(\d*)\.[a-zA-Z0-9]{3,4}$
发布于 2022-02-12 00:12:02
尝试以下模式:\/[^/\d\s]+(\d+)\.[^/]+$
见Regex 演示
代码:
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']
发布于 2022-02-11 22:35:53
Step1:在最后一个点之前找到子字符串。
(.*)\.
输入:/path/to/file/abc123/GCAM5423.cr2
输出:/path/to/file/abc123/GCAM5423
Step2:使用正则表达式查找最后一个数字。
输入:/path/to/file/abc123/GCAM5423
输出:5423
我不知道怎么加入这两个雷克斯,但这对你也有好处。我的hopes^_^
https://stackoverflow.com/questions/71089435
复制