2014-07-14 32 views
1

我使用java格式化了大量的純文本文件,並且需要刪除除撇號之外的所有標點符號。當我原本設置爲replaceAll聲明正則表達式,它的工作擺脫,我知道的一切,但現在我已經找到一個特定的文件/標點設置,它不是在工作。用於刪除特定標點的Java正則表達式

holdMe = holdMe.replaceAll("[,_\"-.!?:;)(}{]", " "); 

我知道我正在發表這個聲明,因爲所有其他標點符號都清除了,沒有句號,逗號等等。我已經嘗試轉義()和{}字符,但它仍然不會被替換爲這些字符。我一直在嘗試使用Oracle文檔教自己的正則表達式,但我似乎無法理解爲什麼這不起作用。

+0

你將不得不展示一些輸入和輸出樣本。 –

+0

這個問題不會讓我包含我遇到問題的文本,它被識別爲代碼,所以這裏是問題文本。輸出與輸入相同。 ** 我們爲他們生活在假釋上的黑鬼 (我的街角把玻璃放在他們的黃金裏)我們總是會這麼做的 即使我被鎖住了{我們仍然在做'(我們仍然要做) 對附近的警察{我們仍然會'做它} {我們仍然會'做到這一點,我們總是會'做到這一點} ** –

回答

5

此正則表達式將迎來每一個標點符號除了撇號

[\p{P}&&[^\u0027]] 

正則表達式的Java的字符串:

"[\\p{P}&&[^\u0027]]" 
+1

這個答案是完美的,除了問題是要求排除'\ x27'的撇號,而不是雙引號字符或NUL。 – VGR

+0

@VGR謝謝,糾正了這個問題 – Andie2302

+0

你可以更進一步,直接在正則表達式中使用'''字符,這會使它更容易理解。 – VGR

1

而不是專門指定你想要刪除的每一個字符 - 爲什麼不做相反的,你想要允許的狀態,並用一個非前綴?

holdMe = holdMe.replaceAll("[^a-zA-Z0-9'\\s]+"," "); 

以上將取代比空格,字母數字字符,並與" "撇號等應有盡有。

+0

不得不添加另一個\以轉義\ s,但它仍不會替換此代碼段中的{}和()字符。 –

1

檢查:

public static void main(String[] args) { 
     /* use \\ (double) before { } [ ] */ 
     String m = "this:{[]}/; is a test".replaceAll("[\\[\\]\\{\\}\\/,_\"-.!?:;)(]", " "); 
     System.out.println(m); 
    } 

輸出:

this  is a test 
相關問題