如何使用正则表达式提取一组数字

时间:2013-10-22 20:09:18

标签: .net regex

我需要在最后一个反斜杠后提取8或10位数字。我没有足够使用正则表达式,但这是我到目前为止(?!\\\\)(?<=.*\\)(?:[^\d]*)(?<id>\d+)(?:[^\d])

\\server\root\list\listName 082713\type_102113\25765199.bpo.pdf
\\server\root\list\listName 082713\type_102113\25765280.bpo.pdf
\\server\root\list\listName 082713\type_102113\25779752.bpo.pdf
\\server\root\list\listName 082713\type_102113\NAME1 0020412714_BPO.pdf
\\server\root\list\listName 082713\type_102113\NAME2 0020421822_BPO.pdf
\\server\root\list\listName 082713\type_102113\NAME3 0020443370_BPO.pdf

a:\listName 082713\type_102113\25765199.bpo.pdf
a:\listName 082713\type_102113\25765280.bpo.pdf
a:\listName 082713\type_102113\25779752.bpo.pdf
a:\listName 082713\type_102113\NAME1 0020412714_BPO.pdf
a:\listName 082713\type_102113\NAME2 0020421822_BPO.pdf
a:\listName 082713\type_102113\NAME3 0020443370_BPO.pdf

更多Generic

在'hwnd'的帮助下,下面的表达式实际上解决了这个问题,但是我的目标是帮助我提取文件夹名称中的一组数字,但很容易改变“环视”表达式。

(?<![^\\\D ])(?<id>\d+(?:-\d+)?)(?=(?:(?:\.[a-z]|[_-])))

3 个答案:

答案 0 :(得分:2)

你似乎在思考这个表达。我会选择负面观察

(?<![^\\ ])\d{8,10}

正则表达式:

(?<!           look behind to see if there is not:
 [^\\ ]        any character except: '\\', ' '
)              end of look-behind
\d{8,10}       digits (0-9) (between 8 and 10 times)

请参阅live demo

在最后一个反斜杠之后的最后一组数字后面有下划线的另一个解决方案是正向前瞻

(\d+)(?=[._])

请参阅live demo

答案 1 :(得分:1)

这样的模式应该在多线模式下工作:

(?<id>\d+)[^\\\d]*$

这将匹配在组"id"中捕获的一个或多个数字,后跟除反斜杠或数字之外的任何字符的零个或多个,后跟行尾。

答案 2 :(得分:0)

也许我错过了一些东西,但我会跟随以下内容:

([0-9]{10}|[0-9]{8})[^\\]+$

您可以在DEMO上查看它。