2012-12-20 27 views
5

我的正則表達式是刪除我的字符串中的所有數字(0-9)。 我不明白爲什麼所有的數字被替換_正則表達式問題c#號碼現在是下劃線

編輯:我知道我的「_」正則表達式模式更改爲下劃線的字符。但不是爲什麼數字!

任何人都可以幫我嗎?我只需要像所有特殊字符一樣去除。

見正則表達式在這裏:

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

Output: "input here ________" 

回答

8

的問題是你的模式使用在中間有一個破折號,它充當從)=一系列ASCII字符的。這裏有一個細目:

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

正如你可以看到,數字49開始,和41-61的範圍介於,所以他們被匹配和替換。

你需要把-出現在字首或字符類的末尾它要匹配字面上,而不是充當範圍:

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

謝謝大家。我必須選擇一個作爲答案,這是解釋問題最詳細的答案。感謝您的輸入。 – Rob

1

你需要逃避你的特殊字符在你的正則表達式。例如,*是通配符匹配。看看這些特殊字符對你的比賽有什麼意義。

+1

正確轉義(尤其是「 - 」),但「*」表示「0或更多」,而不是「任何字符」。 –

+0

@RowlandShaw:編輯 – RonaldBarzell

4

必須轉義-因爲序列[)-=]包含數字

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

移動-到列表的末尾,以便它被看作是一個文字:

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

或者,到

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

現在,它將匹配)-=範圍內的所有字符,其中包含所有數字。

0

我沒有使用C#,但通常「*」字符也是需要轉義的控制字符。

以下的任何字符的整條生產線相匹配,雖然「^」和「$」是一些什麼多餘的:

^.*$ 

這個任意數量的出現在一個字符串「A」字符匹配:

A* 

從奧賴利的 「貓頭鷹」 一書是你真正需要研究這個:

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

+0

這是一個正則表達式元字符,你說得對,它可以匹配任何次數,但是當它出現在一個字符類中時,情況並非如此。這符合星號:'[*]'。 –