簡體   English   中英

replaceAll問題(我想刪除所有出現的[*])

[英]Problems with replaceAll (i want to remove all ocurrences of [*])

我有一個帶有一些單詞的文本,例如[1],[2],[3]等...

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

我想刪除這些單詞,所以字符串必須是這樣的:

例如:既擁有當代藝術和攝影作品的永久收藏品又包括臨時展覽。

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

Wich是實現它的正確方法嗎?

謝謝

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

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

(假設您始終在[]使用數字)。

如果可以是任何字符:

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

(感謝@PeterLawrey)。

采用:

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

[]在正則表達式中很特殊,並且是字符類的分隔符,您需要對其進行轉義。 您最初的正則表達式是尋找點或星號的字符類。

步驟1:獲得更好(更安全)的模式。 您當前的字符串可能會刪除您的大部分字符串,即使您確實按書面要求運行也是如此。 爭取盡可能具體。 應該這樣做(僅匹配括號之間有數字的括號)。

[\d+]

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

\[\d+\]

步驟3:對字符串文字進行轉義。 \\在字符串文字(轉義字符)中具有特殊含義,因此它們也需要轉義。

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

現在我們應該有一些運行良好的代碼。

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

嘗試:

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);
    }
}

輸出:

既有當代藝術和攝影作品的永久收藏品又有臨時展覽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM