3

我正在尝试在以下内容中捕获 6 位数字:

ObjectID: !nrtdms:0:!session:slonwswtest1:!database:TEST:!folder:ordinary,486150:

我尝试了以下正则表达式:

\d+(?::$)

尝试使用非捕获组从返回的匹配项中删除冒号,但它返回冒号,如下所示:

486150:

任何想法我做错了什么?

4

4 回答 4

3

你想要一个积极的前瞻:

\d+(?=:$)

非捕获组只是一个无法通过反向引用访问的组;尽管如此,他们仍然是比赛的一部分。

或者,您可以使用

(\d+):$

并获得第一个匹配组。

于 2013-07-17T15:06:44.863 回答
2

可能您的正则表达式工具正在返回完整的匹配项,因为您在那里没有任何捕获组。尝试将 包含\d+在捕获组中,并找到在您的正则表达式工具中获取捕获组 1 的方法。

或者,您也可以使用积极的前瞻

\d+(?=:$)

鉴于您要捕获 6 位数字,您可以明确表示:

\d{6}
于 2013-07-17T15:06:53.660 回答
2

您应该使用积极的前瞻而不是非捕获组

\d+(?=:$)
于 2013-07-17T15:08:15.840 回答
2

非捕获是不会创建捕获的组(用于反向引用或从匹配结果中提取)。尽管如此,它们将匹配表达式。

您正在寻找的是前瞻- 测试表达式但将其从匹配中排除:

\d+(?=:$)
于 2013-07-17T15:08:54.647 回答