2015-02-06 37 views
0

我正在閱讀文本文件,並且希望找到正確的文本標記。但我在句子末尾有點問題。我的代碼是以下代碼,查詢表示輸入字符串:使用正則表達式清理文本

query = query.replaceAll("[^\\p{L}\\s0-9-_/.]", ""); 
    query = query.replaceAll("\t", " "); 
    query = query.replaceAll("\r", " "); 
    query = query.replaceAll("\n", " "); 
    StringTokenizer words = new StringTokenizer(query, " ");  
    while(tokens.hasMoreTokens()){ 
      String str=tokens.nextToken(); 
      String regex = "\\d+.\\d+"; 
      if(!str.matches(regex)) *<- second problem* 
       System.out.println(str); 

例如,輸入文本是以下行

THE WORLD OF UNIQUE VENDING CARTS. [email protected] www.ubc_lib?9867.come/homepage 876454 9890-9999-9099. 

我想下面的字符串作爲輸出

THE WORLD OF UNIQUE VENDING CARTS 
[email protected] 
www.ubc_lib?9867.come/homepage 
9890-9999-9099 

但我真正出了放點在輸出的第一和最後一行的末尾。 我不能刪除點(。),因爲它會從每個地方刪除。

THE 
WORLD 
OF 
UNIQUE 
VENDING 
CARTS.ff_lashkariyahoo.com *<-problem* 
www.unb_lib9867.come/homepage 
9890-9999-9099.    *<-problem* 

另外我想刪除像4,764,90.900不76-098-098只有數字,我找不到任何比期運用比賽功能較好。就是有什麼辦法也解決了這個問題。

你能幫我嗎?

+0

那麼,你已經指定,當你想刪除點(在結束/空間之前),所以我會從那裏開始。所以,從初學者的removeAll字符類中移除它。 – keyser 2015-02-06 16:17:12

+0

@keyser如果我從這個部分刪除點'query.replaceAll(「[^ \\ p {L} \\ s0-9 -_ /。]」,「」)',那麼字符串_yahoo.com_將更改爲_yahoocom – user3487667 2015-02-06 19:34:11

回答

0

我找到了解決問題的方法。我將我的代碼更改爲下面的代碼,它可以工作。

query = query.replaceAll("[^\\p{L}\\s0-9-_/[email protected]]", ""); 
query = query.replaceAll("\t", " "); 
query = query.replaceAll("\r", " "); 
query = query.replaceAll("\n", " "); 
StringTokenizer words = new StringTokenizer(query, " ");  
while(tokens.hasMoreTokens()){ 
     String str=tokens.nextToken(); 
     str = str.replaceAll("\\.\\B" , " "); *<-new line* 
     String regex = "\\d+.\\d+"; 
     if(!str.matches(regex)) *<- second problem* 
      System.out.println(str);  
1

問題是在字符類的中間存在未轉義的連字符。只有當連字符放置在字符類的開始或結束位置時纔可以使用連字符。

使用此:

query = query.replaceAll("[^\\p{L}\\s0-9_/.-]", ""); 

當連字符來在中間它的行爲的範圍。在你的情況下,它創建了數字9(ASCII:57)和下劃線(ASCII:95)之間的範圍。

+0

我的正則表達式與我的看法沒有任何區別。你能指定不同的東西嗎? – user3487667 2015-02-06 16:15:24

+1

區別已經解釋。看看這個班的最後一個字母,連字符:'-' – keyser 2015-02-06 16:16:01

+0

@ user3487667:你有'9'和'_'之間的連字符,並且''''前面​​有'-'' – anubhava 2015-02-06 16:17:47