2013-01-07 24 views
1

我有像一些字的文本[1],[2],[3]等...用的replaceAll問題(我想刪除的所有ocurrences [*])

例如:收藏了當代藝術和攝影的永久性[1]藏品和臨時[2] 展覽。[6]

我想刪除這些的話,那麼該字符串必須是這樣的:

例如:房屋都永久收藏當代藝術和攝影的臨時 展覽。

我嘗試使用:s = s.replaceAll("[.*]", "");但它只是從文本中刪除點(。)。

什麼是實現它的正確方法?

感謝

+0

你必須做'\\ [[^]] + \\'像這樣 – kaysush

+2

@SuKu否,不是在字符類中。他需要跳過括號,儘管 – jlordo

回答

9

這是因爲[]是正則表達式標誌。這應該工作:

s = s.replaceAll("\\[\\d+\\]",""); 

(假設你總是有[]內的數字)。

如果它可以是任何字符:

s = s.replaceAll("\\[.*?\\]",""); 

(感謝@PeterLawrey)。

+2

嘗試'\\ [。*?\\]'爲非貪婪匹配 –

+0

@assylias我試過'\ ['只爲一個\\ –

+0

@GrijeshChauhan \需要被轉義java字符串。所以正則表達式是'\ [\ d + \]'需要寫成:'\\ [\\ d + \\]'(所有\都加倍)。 – assylias

3

用途:

s.replaceAll("\\[[^]]+\\]", "") 

[]是在正則表達式特殊的字符類的分隔符,你需要躲避他們的。你的原始正則表達式是一個角色類,可以看一個點或一個明星。

+0

也許''\\ [[^]] * \\]「',也許'']'也應該被刪除。 –

+0

@DanielFischer如果'[]'(字符)內的任何內容都可以爲空,我認爲這是不可能的,但是... – fge

+0

嗯,我不知道。只涵蓋所有基地。 –

2

步驟1:獲得更好(更安全)的模式。即使您確實按照書面形式工作,您當前的字符串也可能會刪除大部分字符串。力求儘可能具體。這個應該做的(只匹配在它們之間有數字的括號)。

[\d+] 

第2步:轉義特殊的正則表達式字符。 []在正則表達式語法(字符類)中有特殊含義,所以需要轉義。

\[\d+\] 

第3步:字符串文字轉義。 \在字符串文字(轉義字符)中有特殊含義,所以它們也需要轉義。

"\\[\\d+\\]" 

現在我們應該有一些很好的工作代碼。

s = s.replaceAll("\\[\\d+\\]", ""); 
+0

另外值得注意的是,原始使用的是貪婪的量詞,因此它會將示例輸入轉變爲「同時擁有永久性房屋」。 – OrangeDog

0

嘗試:

public class StringTest { 



    public static void main(String args[]){ 
     String str = "houses both permanent[1] collections and temporary[2] exhibitions of contemporary art and photography.[6]"; 
     String patten = str.replaceAll("\\[[0-9]*]", ""); 

     System.out.println(patten); 
    } 
} 

輸出:

房子都永久收藏當代藝術和攝影的臨時展覽。

相關問題