1

我有一段文字,其中包含 [1]、[2]、[3] 等字词...

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

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

例如:收藏当代艺术和摄影的永久收藏品和临时展览。

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

实现它的正确方法是什么?

谢谢

4

4 回答 4

9

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

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

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

如果它可以是任何字符:

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

(感谢@PeterLawrey)。

于 2013-01-07T15:36:31.200 回答
3

利用:

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

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

于 2013-01-07T15:36:33.363 回答
2

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

[\d+]

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

\[\d+\]

第 3 步:转义字符串文字。\在字符串文字(转义字符)中具有特殊含义,因此它们也需要转义。

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

现在我们应该有一些运行良好的代码。

s = s.replaceAll("\\[\\d+\\]", "");
于 2013-01-07T15:44:02.890 回答
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);
    }
}

输出:

收藏了当代艺术和摄影的永久收藏品和临时展览。

于 2013-01-07T15:50:12.830 回答