正则表达式(.NET):如何在中间获取组

时间:2014-06-03 13:47:16

标签: .net regex

我想在中间找一个小组。例如:

startGOALend => GOAL

GOALend => GOAL

GOAL => GOAL

我正在尝试(start)?(.*)(end)?,但它不会导致所需的结果。

var regex = new Regex("(start)?(.*)(end)?");
if (text == null) return;
var match = regex.Match(text);
foreach (var group in match.Groups)
{
    Console.Out.WriteLine(group);
}

它返回:

startGOALend

start

GOALend

我怎么能用正则表达式来解决它?

1 个答案:

答案 0 :(得分:2)

您希望避免捕获startend群组。您可以通过将?:放在开头来避免捕获一对括号的内容。

你还需要使中间部分的捕获变得懒惰,以便它不会捕获end作为中间部分的一部分。您可以在?之后添加*

总而言之,你得到:

(?:start)?(.*?)(?:end)?$