我有像一些字的文本[1],[2],[3]等...用的replaceAll問題(我想刪除的所有ocurrences [*])
例如:收藏了當代藝術和攝影的永久性[1]藏品和臨時[2] 展覽。[6]
我想刪除這些的話,那麼該字符串必須是這樣的:
例如:房屋都永久收藏當代藝術和攝影的臨時 展覽。
我嘗試使用:s = s.replaceAll("[.*]", "");
但它只是從文本中刪除點(。)。
什麼是實現它的正確方法?
感謝
我有像一些字的文本[1],[2],[3]等...用的replaceAll問題(我想刪除的所有ocurrences [*])
例如:收藏了當代藝術和攝影的永久性[1]藏品和臨時[2] 展覽。[6]
我想刪除這些的話,那麼該字符串必須是這樣的:
例如:房屋都永久收藏當代藝術和攝影的臨時 展覽。
我嘗試使用:s = s.replaceAll("[.*]", "");
但它只是從文本中刪除點(。)。
什麼是實現它的正確方法?
感謝
這是因爲[
和]
是正則表達式標誌。這應該工作:
s = s.replaceAll("\\[\\d+\\]","");
(假設你總是有[]
內的數字)。
如果它可以是任何字符:
s = s.replaceAll("\\[.*?\\]","");
(感謝@PeterLawrey)。
嘗試'\\ [。*?\\]'爲非貪婪匹配 –
@assylias我試過'\ ['只爲一個\\ –
@GrijeshChauhan \需要被轉義java字符串。所以正則表達式是'\ [\ d + \]'需要寫成:'\\ [\\ d + \\]'(所有\都加倍)。 – assylias
用途:
s.replaceAll("\\[[^]]+\\]", "")
[
和]
是在正則表達式特殊的字符類的分隔符,你需要躲避他們的。你的原始正則表達式是一個角色類,可以看一個點或一個明星。
也許''\\ [[^]] * \\]「',也許'']'也應該被刪除。 –
@DanielFischer如果'[]'(字符)內的任何內容都可以爲空,我認爲這是不可能的,但是... – fge
嗯,我不知道。只涵蓋所有基地。 –
步驟1:獲得更好(更安全)的模式。即使您確實按照書面形式工作,您當前的字符串也可能會刪除大部分字符串。力求儘可能具體。這個應該做的(只匹配在它們之間有數字的括號)。
[\d+]
第2步:轉義特殊的正則表達式字符。 []
在正則表達式語法(字符類)中有特殊含義,所以需要轉義。
\[\d+\]
第3步:字符串文字轉義。 \
在字符串文字(轉義字符)中有特殊含義,所以它們也需要轉義。
"\\[\\d+\\]"
現在我們應該有一些很好的工作代碼。
s = s.replaceAll("\\[\\d+\\]", "");
另外值得注意的是,原始使用的是貪婪的量詞,因此它會將示例輸入轉變爲「同時擁有永久性房屋」。 – OrangeDog
嘗試:
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);
}
}
輸出:
房子都永久收藏當代藝術和攝影的臨時展覽。
你必須做'\\ [[^]] + \\'像這樣 – kaysush
@SuKu否,不是在字符類中。他需要跳過括號,儘管 – jlordo