正则嵌套分组与量词问题:提取文件名及其中数字
通用正则方案提取文件名及其中的连续数字
问题原因
你用的(.*(\d+).*)\.pdf之所以只匹配到单个数字4,是因为第一个.*是贪婪匹配,会尽可能多吃掉字符——它会从开头一直匹配到最后一个数字的前一位,只留给\d+最后一个数字。
两种通用解决思路
方案1:用非贪婪匹配调整捕获顺序
把正则改成:
^(.*?)(\d+)(.*?)\.pdf$
.*?是非贪婪模式,会尽可能少匹配字符,第一个.*?会停在第一个连续数字的开头,让\d+完整捕获所有连续数字;- 捕获组1(
.*?)+ 捕获组2(\d+)+ 捕获组3(.*?)就是不带扩展名的完整文件名; - 捕获组2直接就是你要的连续数字。
方案2:拆分两步处理(更直观通用)
- 先提取不带扩展名的文件名,用正则:
捕获组1就是^(.*)\.pdf$file_1234_test; - 再对这个文件名结果用
\d+匹配,直接提取出连续数字1234。
这两种方案都不依赖文件名的固定结构(比如下划线、数字位数),只要文件名里有连续数字、扩展名是.pdf就能适用。
内容的提问来源于stack exchange,提问作者biburepo
相关产品推荐
相关产品推荐

