这是我的字符串:file_1234_test.pdf
任务是找到不带扩展名的文件名并找到编号。
所以结果应该是:
> Match 1 = file_1234_test.pdf
> Group 1 = file_1234_test
> Group 2 = 1234
我找到了Stack-58379142,但它没有回答我的问题。
我在regex101和regexstorm上测试了以下查询
步骤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
但是这样的查询(正如我所感觉到的)是不必要的缩小和过于具体的。如果我有一个几百个的列表和...
所以,问题:有解决办法吗?
1条答案
按热度按时间z9smfwbn1#
您可以尝试以下正则表达式模式:
(.*?(\d+).*)\.pdf
这使得第一部分
.*?
成为惰性匹配。参见here演示