5

私の正規表現は、文字列内のすべての数値(0〜9)を削除しています。すべての数字が_に置き換えられる理由がわかりません

編集:私の「_」正規表現パターンが文字をアンダースコアに変更することを理解しています。しかし、なぜ数字ではありません!

誰かが私を助けることができますか?すべての特殊文字のように削除する必要があるだけです。

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

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

Output: "input here ________"
4

5 に答える 5

8

問題は、パターンの中央にダッシュが使用されていることです。ダッシュは、から)までのASCII文字の範囲として機能し=ます。内訳は次のとおりです。

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

ご覧のとおり、数字は49から始まり、41〜61の範囲にあるため、一致して置き換えられます。

-範囲として機能するのではなく、文字通り一致させるには、文字クラスの最初または最後にを配置する必要があります。

"[-!@#$%^&*()=+`~{}'|]"
于 2012-12-20T13:57:01.637 に答える
4

-シーケンス[)-=]には数字が含まれているため、エスケープする必要があります

string symbolPattern = "[!@#$%^&*()\-=+`~{}'|]";
于 2012-12-20T13:56:11.273 に答える
2

をリストの最後に移動し-て、リテラルとして表示されるようにします。

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

または、前面に:

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

)-=現状では、すべての数字を含む範囲内のすべての文字に一致します。

于 2012-12-20T13:57:31.793 に答える
1

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

于 2012-12-20T13:54:38.910 に答える
0

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

以下は、任意の文字の行全体に一致しますが、「^」と「$」は多少冗長です。

^.*$

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

A*

oreillyの「フクロウ」の本は、これを研究するために本当に必要なものです。

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

于 2012-12-20T14:15:28.287 に答える