2012-12-20 3 views
5

My Regexが文字列内のすべての数字(0〜9)を削除しています。 すべての数字が#正規表現の問題C#の数字がアンダースコアになりました

に置き換えられている理由はありません。私の "_"正規表現パターンは、文字を下線に変更することを理解しています。しかし、なぜ数字ではありません!

誰でもお手伝いできますか?私はすべての特殊文字のように削除する必要があります。

はここに正規表現を参照してください:

string symbolPattern = "[[email protected]#$%^&*()-=+`~{}'|]"; 
Regex.Replace("input here 12341234" , symbolPattern, "_"); 

Output: "input here ________" 

答えて

8

が含まれているため、あなたは-をエスケープする必要があります。ここ内訳です:

  • ):41
  • 1:49
  • =:61

あなたが見ることができるように、番号が49で開始し、41から61の範囲の間に入ります、彼らは一致して置き換えられます。

あなたはそれが文字通り一致ではなく、範囲として機能するようにするために先頭または文字クラスの両端に-を配置する必要があります。

"[[email protected]#$%^&*()=+`~{}'|]" 
+1

ありがとうございました。私は答えとして1つを選択しなければなりません。そして、これは問題を説明した最も詳細なものです。あなたのご意見ありがとうございます。 – Rob

1

あなたの正規表現であなたの特殊文字をエスケープする必要があります。たとえば、*はワイルドカードと一致します。それらの特殊文字のいくつかがあなたのマッチのために意味するものを見てください。

+1

エスケープ(特に " - ")の場合は正しくなりますが、 '* 'は"任意の文字 "ではなく" 0以上 "を意味します。 –

+0

@ローランドショー:編集 – RonaldBarzell

4

シーケンス[)-=]は問題があなたのパターンは)から=までのASCII文字の範囲として働き真ん中にダッシュを使用している数字

string symbolPattern = "[[email protected]#$%^&*()\-=+`~{}'|]"; 
2
ので、リストの最後に -を移動

"[[email protected]#$%^&*()=+`~{}'|]" 
フロントに、

"[[email protected]#$%^&*()=+`~{}'|-]" 

または:それはリテラルと見られています

これは、すべての数字を含む)-=の範囲のすべての文字と一致します。

0

私はC#を使用していませんが、通常は "*"文字もエスケープする必要のある制御文字です。

「^」と「$」は、いくつかのものを冗長化しているが、以下は、任意の文字の行全体にマッチする:

^.*$ 

これは文字列で表示され、「A」、任意の数の文字に一致します。

A* 

oreillyから "フクロウ" の本は、あなたが本当にこれを研究するために必要なものです:

http://shop.oreilly.com/product/9780596528126.do?green=B5B9A1A7-B828-5E41-9D38-70AF661901B8&intcmp=af-mybuy-9780596528126.IP

+0

これは正規表現のメタキャラクターであり、何回でもマッチすることは間違いありませんが、これは文字クラス内では発生しません。これは文字通りアスタリスクと一致します: '[*]'。 –