2

電話番号からすべての非数字を削除しようとしていました。

したがって、「(123)456-7890」という形式の番号があるとします。

Regex.Replace(phone, @"[ -()]", string.Empty)

ダッシュを残します。()エスケープ( "\(\)")と同じです。

これ

Regex.Replace(phone, @"[() -]", string.Empty)

しかし、動作します。

[]の文字の順番は関係ないと思いましたか?実際、スペースを切り替えてダッシュしても同じ結果が得られます。しかし、ブラケットを最初に機能させる必要がありますか?

4

3 に答える 3

4

-範囲を宣言するために使用できます。例:[a-z]。あなたはそれを逃れる必要があります:[ \-()]

例外は、文字グループの最後にダッシュを配置した場合です。この場合、その唯一の意味はリテラル-です。

于 2012-07-05T16:18:32.523 に答える
3

-このコンテキストでは特殊文字であり、範囲を示します(例[a-zA-Z0-9])。最後に表示されている場合、範囲を示すことができないため、正しく機能します。

正しい解決策は、円記号でエスケープすることです\-

于 2012-07-05T16:17:41.883 に答える
3

[]ハイフンは文字クラス( )内で使用され、。などの範囲を示すため、ハイフンの配置は重要a-zです。したがって、末尾にハイフンが付いていると、正規表現エンジンは、ダッシュが範囲内で使用されることを意図していないことを認識します。これは、ダッシュの後に何もないためです。http://www.regular-expressions.info/charclass.htmlを参照してください

于 2012-07-05T16:20:15.203 に答える