首页 > 解决方案 > 如果一个正则表达式匹配组值在另一个匹配组值内,正则表达式不会返回所有组?

问题描述

正则表达式:

(?<lang2>this\s*is\s*a\s*test\s*string)|(?<lang1>test)

示例文本:

this is a test string

如果您单独运行这些命名的捕获组,则会在具有值的匹配组中产生结果。但是如果你像上面写的那样运行它,那么它会返回 1 组而不是 2 组。我需要抓住这两个群体。所以输出组应该是这样的:

匹配组 1:“这是一个测试字符串”

匹配组 2:“测试”

标签: .netregex

解决方案


在您的模式中,您使用一个交替,它将捕获第一个捕获组中的整个字符串,之后交替部分不再匹配。

您可以嵌套捕获组而不是使用交替。

(?<lang2>this\s*is\s*a\s*(?<lang1>test)\s*string)

推荐阅读