2017-03-15 1 views
1

文字列: "+49(0)162 12345 0162".NETでRegexにマッチした文字列の一部のみを置き換える方法は?

正規表現は次のとおりです:^(+ \ s * 4 \ s * 9 \ s *(\ s * 0 \ s *)| + \ (15 | 16 | 17)

これは一致します。 : "+49(0)16"

今は16の前のすべてを置き換えたいので、結果は "162 12345 0162"となります。

私がこれまで持っている:

 Regex regex = new Regex(@"^(\+\s*4\s*9\s*\(\s*0\s*\)|\+\s*4\s*9|0\s*0\s*4\s*9|0|\(\s*0\s*\))\s*(15|16|17)"); 
     string result = regex.Replace("+49 (0) 162 12345 0162", ""); 

しかし、それは "2 12345 0162" を返します。

ありがとうございました!

答えて

1

(15|16|17)パターンの一部(第2のキャプチャグループ)は、16と一致してキャプチャします。したがって、逆参照として$2に置き換える必要があります。

string result = regex.Replace("+49 (0) 162 12345 0162", "$2"); 

regex demo

enter image description here

+0

ありがとうございました – Powerslave

0

が本当に必要最後に(15|16|17)ですか?を参照してください。それを削除すると、結果が得られます。

+0

はい、「+49(0)142 12345 0162」と一致する必要はありません。 – Powerslave

関連する問題