[英]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.