我的文字有一些像[1],[2],[3]等等......
例如:永久[1]收藏和临时收藏[2] 当代艺术和摄影展览。[6]
我想删除这些单词,所以字符串必须是这样的:
例如:既有永久收藏又有临时收藏 当代艺术和摄影展。
我尝试使用:s = s.replaceAll("[.*]", "");
但它只删除文本中的点(。)。
这是实现它的正确方法吗?
感谢
答案 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);
}
}
输出:
既有永久收藏品,也有当代艺术和摄影的临时展览。