替代品上的正则表达式量词(竖线“|”)

时间:2012-10-30 19:49:51

标签: c# regex quantifiers

我想修剪一个字符串,如果它开始和/或以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;
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用此

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

您现在可以像这样匹配..

return Regex.Match(input,"^(?:foo|bar)?(.*?)(?:foo|bar)?$").Groups[1].Value;

答案 1 :(得分:1)

我建议你一起去

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

或者,如果您想在开头和结尾都允许foo和/或bar,那么

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

结果为Groups[0]