RegEx:嵌套组和限定符

ltskdhd1  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(156)

这是我的字符串:file_1234_test.pdf
任务是找到不带扩展名的文件名并找到编号。
所以结果应该是:

> Match 1 = file_1234_test.pdf
> Group 1 = file_1234_test
> Group 2 = 1234

我找到了Stack-58379142,但它没有回答我的问题。
我在regex101regexstorm上测试了以下查询
步骤1.符合预期

> (.*)\.pdf
> Match 1 = file_1234_test.pdf
> Group 1 = file_1234_test

步骤2.如预期:贪婪"+"量词

> (\d+)
> Match 1 = 1234
> Group 1 = 1234

步骤3.仍符合预期

> ((\d+).*)
> Match 1 = 1234_test.pdf
> Group 1 = 1234_test.pdf
> Group 2 = 1234

步骤4.再次如预期

> ((\d+).*)\.pdf
> Match 1 = 1234_test.pdf
> Group 1 = 1234_test
> Group 2 = 1234

第五步"+"量词突然变懒了

> (.*(\d+).*)\.pdf
> Match 1 = file_1234_test.pdf
> Group 1 = file_1234_test
> Group 2 = 4

当然(.*(\d{4}).*)\.pdf(.*_(\d+).*)\.pdf可以工作。

> Match 1 = file_1234_test.pdf
> Group 1 = file_1234_test
> Group 2 = 1234

但是这样的查询(正如我所感觉到的)是不必要的缩小和过于具体的。如果我有一个几百个的列表和...
所以,问题:有解决办法吗?

z9smfwbn

z9smfwbn1#

您可以尝试以下正则表达式模式:(.*?(\d+).*)\.pdf
这使得第一部分.*?成为惰性匹配。
参见here演示

相关问题