我需要在列表中生成一个命名的数字捕获
示例源数据
This is a comment on line 1
Here is another Comment Line 2
Log ID 1234,5555,2342
使用:(?<id>(\d+)*)
我会拿起结果
1
2
1234
5555
2342
但这是错误的1
。2
我需要它来拾取 Log ID Only 之后的项目。
我正在寻找一个将返回的正则表达式
1234
5555
2342
在一个名为的组中id
我需要在列表中生成一个命名的数字捕获
示例源数据
This is a comment on line 1
Here is another Comment Line 2
Log ID 1234,5555,2342
使用:(?<id>(\d+)*)
我会拿起结果
1
2
1234
5555
2342
但这是错误的1
。2
我需要它来拾取 Log ID Only 之后的项目。
我正在寻找一个将返回的正则表达式
1234
5555
2342
在一个名为的组中id
如果您的语言支持可变长度的lookbehinds,您应该能够使用以下内容:
(?<=Log ID.*)(?<id>\d+)
我还对您的原始正则表达式进行了一些修改,因为我并没有真正看到命名捕获组内的附加捕获组的意义,或者嵌套重复 ((\d+)*
相当于(\d*)
,但我认为您实际上想要\d+
这样它需要你要匹配至少一位数字)。
如果您不能使用可变长度的lookbehinds(大多数语言),那么您可能需要分两步执行此操作。首先匹配任何带有“日志 ID”的行,然后在这些行中查找数字。
断言背后的负面看法会起作用吗?
(?<![Ll]ine )(?<id>\d+)
您也可以不看(向前|向后)执行此操作:
"Log\s+ID\s+((?<id>\d+),?)+"
这将为您提供一个名为的单独组中的每个数字id
Log\s+ID\s+
: 匹配你要的ID,但不要捕获(?<id>\d+),?
:捕获数字并在其后允许一个可选的逗号(但不要捕获)+
: 至少重复一次但是,这会带来一个问题,因为您将拥有多个具有相同名称的组 - 这取决于如何处理此问题的语言。
或者,您可以使用此正则表达式将日志 ID 之后的整个字符串捕获到一组中:
"Log\s*ID\s+(?<id>(?:\d+,?)+)"