2013-09-22 102 views
0

我使用Java進行編碼,並且我有一個字符串,我要保留字母,數字,「:」,「 - 」和空格,並刪除其他所有內容。所以,我用這段代碼:正則表達式:替換特定字符和空白除外

str=str.replaceAll("[^\\dA-Za-z#:-\\s*]", ""); 

它不起作用。

它的工作很好,直到

str=str.replaceAll("[^\\dA-Za-z#:-]", ""); 

這裏的一切,除了由字母,數字和字符「:」和「 - 」被刪除

但是,當我試圖添加條件對於空白字符我正面臨問題。

我將不勝感激您的幫助。

預先感謝您。

+0

'#'和'*'怎麼辦?他們在你的角色課上,但是在你解釋你的正則表達式應該做什麼時你沒有提到他們。 –

回答

1

-描繪範圍..

你的情況,你實際上是試圖以匹配範圍:字符\s這是一個無效的範圍..


移動-到開始

[^-\\dA-Za-z#:\\s] 

或結束

[^\\dA-Za-z#:\\s-] 
+0

您應該刪除最後一個選項。那在那裏沒有好處。 –

+0

@RohitJain嗯..但它應該已經工作 – Anirudha

+0

非常感謝您的回答..現在我有[^ \\ A-Za-z \\ s-]返回索引3附近的非法/不支持的轉義序列你知道這是爲什麼嗎? – user2008973

1

破折號必須是字符類中的第一個或最後一個字符,否則它將被解釋爲範圍指示符(如[A-Z]);在你的情況下,[:-\\s]是一個無意義的範圍。使用

str = str.replaceAll("[^\\dA-Za-z#:\\s-]+", ""); 

(或者您是否想在文本中保留星號?)字符類中使用時

相關問題