我有一段文字,其中包含 [1]、[2]、[3] 等字词...
例如:收藏永久[1] 收藏品和临时[2] 当代艺术和摄影展览。[6]
我想删除这些单词,所以字符串必须是这样的:
例如:收藏当代艺术和摄影的永久收藏品和临时展览。
我尝试使用:s = s.replaceAll("[.*]", "");
但它只是从文本中删除点(。)。
实现它的正确方法是什么?
谢谢
这是因为[
和]
是正则表达式标记。这应该有效:
s = s.replaceAll("\\[\\d+\\]","");
(假设您总是在 内有数字[]
)。
如果它可以是任何字符:
s = s.replaceAll("\\[.*?\\]","");
(感谢@PeterLawrey)。
利用:
s.replaceAll("\\[[^]]+\\]", "")
[
并且]
在正则表达式中是特殊的并且是字符类的分隔符,您需要将它们转义。你原来的正则表达式是一个寻找点或星的字符类。
第 1 步:获得更好(更安全)的模式。您当前的字符串可能会删除您的大部分字符串,即使您确实让它按书面形式工作。目标尽可能具体。这个应该做(只匹配它们之间有数字的括号)。
[\d+]
第 2 步:转义特殊的正则表达式字符。[]
在正则表达式语法(字符类)中具有特殊含义,因此它们需要转义。
\[\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);
}
}
输出:
收藏了当代艺术和摄影的永久收藏品和临时展览。