replaceAll的问题(我想删除所有出现的[*])

时间:2013-01-07 15:35:11

标签: java regex replace

我的文字有一些像[1],[2],[3]等等......

  

例如:永久[1]收藏和临时收藏[2]   当代艺术和摄影展览。[6]

我想删除这些单词,所以字符串必须是这样的:

  

例如:既有永久收藏又有临时收藏   当代艺术和摄影展。

我尝试使用:s = s.replaceAll("[.*]", "");但它只删除文本中的点(。)。

这是实现它的正确方法吗?

感谢

4 个答案:

答案 0 :(得分:9)

这是因为[]是正则表达式标记。这应该有效:

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

(假设您总是有[]内的数字。)

如果它可以是任何字符:

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

(感谢@PeterLawrey)。

答案 1 :(得分:3)

使用:

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

[]在正则表达式中是特殊的,并且是字符类的分隔符,您需要转义它们。你的原始正则表达式是一个寻找点或星的角色类。

答案 2 :(得分:2)

第1步:获得更好(更安全)的模式。您当前的那个可能会删除大部分字符串,即使您确实按照书面工作。尽可能具体。这个应该做(只匹配它们之间有数字的括号)。

[\d+]

第2步:转义特殊的正则表达式字符。 []在正则表达式语法(字符类)中具有特殊含义,因此它们需要转义。

\[\d+\]

第3步:转义为字符串文字。 <{1}}在字符串文字(转义字符)中有特殊含义,因此它们也需要转义。

\

现在我们应该有一些很好的代码。

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

答案 3 :(得分: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);
    }
}

输出:

既有永久收藏品,也有当代艺术和摄影的临时展览。