正则表达式只检索第一个必要元素,但不是全部

时间:2010-03-19 11:48:37

标签: .net regex

任何人都可以帮助我从以下示例文本中检索一些元素:

sdfaasdflj asdfjl;a 
AB-12/34 BC-/85 CD-//8 DD-77
DE-78/9
EE-78-98
asdf; asdjf

有必要获得以下元素: AB-12/34,BC- / 85,CD - // 8,DD-77,DE-78/9

当我使用这样的正则表达式时:

\s*(?<elements>\b[A-Z]{2}-[/0-9]+\b)

一切正常 - 所有必要的元素都被检索出来(EE元素除外,但无关紧要)。 问题是这一行是更复杂的正则表达式的一部分,所以当我尝试应用这样的正则表达式时:

(?s).*\sas.*?
\s*(?<elements>\b[A-Z]{2}-[/0-9]+\b)*.*
.*as

它只返回第一个AB-12/34元素而没有别的。 如何纠正正则表达式以获取所有元素? TIA。

1 个答案:

答案 0 :(得分:2)

要在示例中多次匹配块"(?<elements>\b[A-Z]{2}-[/0-9]+\b)*",您需要在其中包含空格。即:

"(?<elements>\s*\b[A-Z]{2}-[/0-9]+\b)*"

如果您不想捕获它,请尝试""(?:\s*(?<elements>\b[A-Z]{2}-[/0-9]+\b))*"。但我不确定非捕获组内的命名捕获组如何工作。 =)