2011-10-10 71 views

回答

2

這個怎麼樣:

[^a-zA-Z0-9#*%]+ 

如果你正在使用unicode的,你可以做(​​如Tim的答案):

[^\p{L}\p{N}#*%]+ 
+2

取決於你是否認爲'了'是一個字母或沒有。 .NET確實這麼認爲,並將它包含在'\ w'中。 –

+0

如果文本是俄文,將無法正常工作(它確實是) – Alexei

+0

當然你是對的。我編輯了我的答案。 – Toto

4

使用

[^\p{L}\p{N}#*%]+ 

此相匹配的一個或多個不是字母也不是數字的字符,也不是#,*%

+0

+1我不知道\ p令牌:) –

+0

無法使其工作:(:'解析「[^ \ pL \ pN#*%] +」 - 格式錯誤\ p {X}字符轉義。 ' – Alexei

+0

嘗試'[^ \ p {L} \ p {N}#*%] +'。當屬性名稱只是一個字母時,它應該沒有大括號,但在.NET中它們似乎是必需的 –

1

使用此。

([^\w#*%]|_)

這個%之後的,添加任何其他特殊字符。

基本上說,匹配任何不是(^)單詞字符(\ w),#,*或%OR匹配的字符。

+0

下劃線怎麼樣?現在它不被允許,但它在OP的正則表達式中被允許。 –

+0

謝謝,現在更新 – Joey

+0

這不是很好,它給我留下了很多「 - 」字符:( – Alexei

0

您可以使用set減法爲:

@"[\W_-[#*%]]+" 

這個集合的所有非字字符和下劃線,減去#*%匹配。

請注意,您不必在字符類中爲「或」使用|,因爲這是隱含的。事實上,你的正則表達式中的|只是匹配|

另請注意,在.NET中,\w與下劃線以外的其他幾個「連接符」標記符相匹配。如果你想在其他人物也匹配,您可以使用

@"[\W\p{Pc}-[#*%]]+" 
1

看來這種方式是你最好的解決方案

@"(?!.*[^\w#*%])" 
+0

我不這麼認爲。 [^ \ w#*%])'意思是,「從當前位置向前看,沒有與[[\ w#*%]'」不匹配的字符。「)不需要任何字符,所以它會一直匹配,並且不消耗任何字符,所以它不能用於刪除任何東西。 –

相關問題