1

我需要在最后一个反斜杠之后提取 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

更通用

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

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

3 回答 3

2

您似乎在考虑这种表达方式。我会在这里使用负面的Lookbehind

(?<![^\\ ])\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)

观看现场演示

在最后一个反斜杠之后的最后一组数字后面有一个下划线的另一种解决方案是Positive Lookahead

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

观看现场演示

于 2013-10-22T20:45:14.190 回答
1

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

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

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

于 2013-10-22T20:14:22.017 回答
0

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

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

您可以在DEMO上检查它。

于 2013-10-22T20:13:50.803 回答