【发布时间】:2018-04-17 01:16:15
【问题描述】:
我有以下测试文件名:
abc001_20111104_summary_123.txt
abc008_200700953_timeline.txt
abc008_20080402_summary200201573unitf.txt
123456.txt
100101-100102 test.txt
abc008_20110902_summary200110254.txt
abcd 200601141 summary.txt
abc008_summary_200502169_xyz.txt
我需要从每个文件名中提取一个数字。
号码必须为 6、7、9 或 10 位数字(因此,不包括 8 位数字)。
如果找到多个,我想获得第一个数字,如果没有找到,我想获得空字符串。
我设法在 2 步过程中做到了这一点,首先删除 8 位数字,然后从我的列表中提取 6 到 10 位数字。
step 1
regex: ([^0-9])([0-9]{8})([^0-9])
replacement: \1\3
step 2
regex: (.*?)([1-9]([0-9]{5,6}|[0-9]{8,9}))([^0-9].*)
replacement: \2
在这 2 步过程之后得到的数字正是我想要的:
[]
[200700953]
[200201573]
[123456]
[100101]
[200110254]
[200601141]
[200502169]
现在,问题是: 有没有一种方法可以一步完成?
我看到this nice solution 回答了一个类似的问题,但是,如果找到多个,它会给我最新的号码。
注意:使用The Regex Coach进行测试。
【问题讨论】:
-
指定你的编程语言会很有帮助。