2016-10-26 7 views
1

私はRegex.ReplaceをC#で使用しています。置換された文字列では、オプションのグループの1つが取得された場合にのみ、文字列の一部が出力されるという条件を付けたいと思います。 FlagキャプチャグループはオプションであることをRegex.Replace:オプションのグループに基づく条件付き置換

(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$) 

注 - :例えば、私はこの正規表現を持っています。

置換文字列は、今私はフラッグ・グループが捕獲されている場合"Flag is : ${Flag}"文字列が結果だけに表示されたい

"Expiry is ${Expiry}. Flag is : ${Flag}" 

です。

私は、次のコードを使用しています:

var regex = new 
Regex("(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$)", 
RegexOptions.IgnoreCase | RegexOptions.Compiled); 
string result = regex.Replace("10y", "Expiry is ${Expiry}. Flag is : ${Flag}"; 

結果がなければならないExpiry is 10yで。

string result = regex.Replace("10y abc", "Expiry is ${Expiry}. Flag is ${Flag}"); 

結果は、「有効期限は10yです。フラグは:abc」です。

ご迷惑をおかけして申し訳ありません。

+0

あなたの一部をあなたと共有できますか? –

+0

関連:http://stackoverflow.com/questions/767869/how-to-regex-replace-match-group-item-with-method-result –

+0

エディターに慣れてください。あなたがコードを投稿する場合に使用すべきコードフォーマットコマンド(Ctrl-K)があります。そうしないと、マークダウンは '*'(および他のもの)を解釈してコードの意味を変更します。 –

答えて

2

指定したグループが一致(=一致)に参加したかどうかに基づいて、異なる置換値を使用できます。

var s = "1m aZ"; 
var pat = @"(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$"; 
var res = Regex.Replace(s, pat, m => m.Groups["Flag"].Success ? 
    string.Format("Flag is : {0}.", m.Groups["Flag"].Value) : 
    string.Format("Expiry is {0}.", m.Groups["Expiry"].Value)); 
Console.WriteLine(res); 

Flagグループが一致した場合、交換は他に、string.Format("Flag is : {0}.", m.Groups["Flag"].Value)なり、交換が唯一の有効期限メッセージが含まれていますonline demo

を参照してください:

は、以下の例は、参照してください。

関連する問題