0

我想修剪一个字符串,如果它以 foo 或 bar 开头和/或结尾,并且想要获取正则表达式组中的内部字符串。
例如

“fooTestbar”应该是“Test”,
“Test2bar”应该是“Test2”
,“Test3”应该是“Test3”。

我目前的正则表达式是:

^(foo|bar)?(.*)(foo|bar)?$

但这不起作用,因为我无法将量词?应用于替代组((foo|bar))。

我的代码

static string returnMatch(string text){
string pattern = @"^(foo|bar)?(.*)(foo|bar)?$";
return System.Text.RegularExpressions.Regex.Match(text, pattern).Groups[2].Value;
}

任何帮助将不胜感激。

4

2 回答 2

1

你可以用这个

^(?:foo|bar)?(.*?)(?:foo|bar)?$

你现在可以像这样匹配它..

return Regex.Match(input,"^(?:foo|bar)?(.*?)(?:foo|bar)?$").Groups[1].Value;
于 2012-10-30T20:02:42.430 回答
1

我建议你去

(?:^|(?<=^foo)).*?(?=bar$|$)

或者,如果您想在开头和结尾允许foo和/或,则使用bar

(?:^|(?<=^foo)|(?<=^bar)).*?(?=foo$|bar$|$)

导致Groups[0]

于 2012-10-30T20:04:09.330 回答