Skip to main content
 首页 » 编程设计

c#之正则表达式可选择匹配文件名末尾的 3 位数字

2024年02月25日36linjiqin

我这辈子都想不出如何让这些匹配:

File name without 3 digit end.jpg 
File name with 3 digit 123.gif 
Single 123.jpg 
Single.png 

但不是这些:

Single 1.jpg 
Single 123b.gif 
More words 123b.png 

到目前为止我能做到的最好的表达方式是:

^[^\s]((?!\s{2})(?!,\S).)*\b(\p{L}+|\d{3})\.\w{3}$ 

但它无法匹配Single.png,仍然匹配Single 123b.gif和More words 123b.png。 我想我明白为什么它不起作用,但我不知道如何正确使用它,我已经苦苦挣扎并用谷歌搜索了 2 天。

我的完整规则是:可选地在文件扩展名之前恰好 3 位数字、3 个字母的文件扩展名、文件名中没有双空格以及在逗号之后但不能在逗号之前有一个空格。

请您参考如下方法:

您可以使用包含 3 位数字或一系列非数字的交替组,前面是单词边界断言:

^.*?\b(?:\d{3}|\D+)\.\w{3}$ 

演示:https://regex101.com/r/A9iSVE/3