0

たとえば、文字列が foo または bar で開始および/または終了し、正規表現グループの内部文字列を取得したい場合は、文字列をトリミングしたいと考えています。
例えば

「fooTestbar」は「Test」、
「Test2bar」は「Test2」
、「Test3」は「Test3」である必要があります。

私の現在の正規表現は次のとおりです。

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

しかし、これは機能しません。これは、Quantifier?を代替グループ ( (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$|$)

または、最初と最後にfooand/orを許可したい場合は、bar

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

結果としてGroups[0]

于 2012-10-30T20:04:09.330 に答える