我試圖做一個正則表達式爲具有至少1個非字母數字符號在它正則表達式的表達式對所有非字母數字符號
我想使用的代碼是
Regex symbolPattern = new Regex("?[[email protected]#$%^&*()_-+=[{]};:<>|./?.]");
字符串我只想匹配[email protected]#$%^&*()_-+=[{]};:<>|./?.
中的一個,但它似乎沒有工作。
我試圖做一個正則表達式爲具有至少1個非字母數字符號在它正則表達式的表達式對所有非字母數字符號
我想使用的代碼是
Regex symbolPattern = new Regex("?[[email protected]#$%^&*()_-+=[{]};:<>|./?.]");
字符串我只想匹配[email protected]#$%^&*()_-+=[{]};:<>|./?.
中的一個,但它似乎沒有工作。
如果要匹配非字母數字符號,請使用\W|_
。
Regex pattern = new Regex(@"\W|_");
這將匹配除0-9和a-z以外的任何內容。有關\W
角色等級和其他可在此處獲得的信息。
您可以檢查相反的情況?
Match match = Regex.Match(@"^([a-zA-Z0-9]+)$");
if (!match.Success) {
// it's alphanumeric
} else {
// it has one of those characters in it.
}
你也可以避免正則表達式,如果你想:
return s.Any(c => !char.IsLetterOrDigit(c))
現在獲得額外的信用:哪個性能更好? – Alan 2010-06-24 21:40:43
嘿嘿..有時你只需要使用正則表達式的一切:)即使我喜歡正則表達式,通常最好避免它們。 – simendsjo 2010-06-24 21:41:02
@Alan - 稍後我會運行一個測試(除非其他人發出響聲),但我相信這會更快一些。 – ChaosPandion 2010-06-24 21:45:58
我沒有得到你的整個問題,但這正則表達式匹配包含至少一個非字母數字字符那些字符串。這包括空白(雖然看不到你的列表中)
[^\w]+
你的正則表達式只需要很少的調整。連字符用於形成A-Z
等範圍,因此如果要匹配文字連字符,則必須使用反斜槓將其轉義或將其移至列表的末尾。您還需要轉義方括號,因爲它們是字符類的分隔符。然後在開始時擺脫這個問號,並且你在做生意。
Regex symbolPattern = new Regex(@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,-]");
如果你只想匹配ASCII標點符號,這可能是最簡單的方法。 \W
除了標點符號之外還匹配空格和控制字符,並且它與整個Unicode範圍中的它們匹配,而不僅僅是ASCII。
雖然您似乎錯過了幾個字符:反斜槓,撇號和引號。添加這些爲您提供:
@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,\\'""-]"
最後,這是一個好主意,始終使用C#的逐字字符串(@"..."
)的正則表達式;它可以爲反斜槓節省很多麻煩。引號是通過加倍來逃脫的。
不是爲了挑戰大師,而是你不是指'\ W'? '\ w'(小寫字母w)匹配所有單詞字符。 – Alan 2010-06-24 21:38:31
這幾乎是完全錯誤的。 – 2010-06-24 21:42:49
然而,它得到3 upvotes。 – Alan 2010-06-24 21:44:19