2012-10-30 37 views
0

我想修剪一個字符串,如果它開始和/或以foo或bar結尾,例如想要獲取正則表達式組中的內部字符串。
例如替代品上的正則表達式量詞(豎線「|」)

「fooTestbar」 應爲 「測試」,
「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; 
} 

任何幫助將不勝感激。

+0

你爲什麼不能呢?你使用哪種語言/工具? –

+0

我使用.Net的System.Text.RegularExpressions.Regex.Match與C#,它沒有工作。 – Tearsdontfalls

回答

1

您可以使用此

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

現在你可以這樣搭配吧..

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

謝謝,但這隻適用於開始foo |酒吧,而不是爲和 – Tearsdontfalls

+0

謝謝,它適用於我的一個小編輯,Regex.Matches沒有替換參數。 – Tearsdontfalls

+0

@Tearsdontfalls ahhh..thxx – Anirudha

1

我建議你去與

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

,或者,如果你想要允許foo和/或bar軋花機底,然後用

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

其結果Groups[0]

+0

這隻在開始時替換foo,例如開始時不是條而是在最後替換不起作用。 – Tearsdontfalls

+0

@Tearsdontfalls - 我在你的問題中看不到這樣的例子......我用這個替代方法更新了我的答案。 –

+0

好吧,我解釋了它可能有點不好,用你更新的正則表達式,它只會在最後取代foo | bar。 – Tearsdontfalls