[英]Problems with replaceAll (i want to remove all ocurrences of [*])
我有一个带有一些单词的文本,例如[1],[2],[3]等...
例如:既收藏当代艺术和摄影的永久作品[1],又收藏临时展览[2]。[6]
我想删除这些单词,所以字符串必须是这样的:
例如:既拥有当代艺术和摄影作品的永久收藏品又包括临时展览。
我s = s.replaceAll("[.*]", "");
使用: s = s.replaceAll("[.*]", "");
但它只是从文本中删除点(。)。
Wich是实现它的正确方法吗?
谢谢
这是因为[
和]
是正则表达式标记。 这应该工作:
s = s.replaceAll("\\[\\d+\\]","");
(假设您始终在[]
使用数字)。
如果可以是任何字符:
s = s.replaceAll("\\[.*?\\]","");
(感谢@PeterLawrey)。
采用:
s.replaceAll("\\[[^]]+\\]", "")
[
和]
在正则表达式中很特殊,并且是字符类的分隔符,您需要对其进行转义。 您最初的正则表达式是寻找点或星号的字符类。
步骤1:获得更好(更安全)的模式。 您当前的字符串可能会删除您的大部分字符串,即使您确实按书面要求运行也是如此。 争取尽可能具体。 应该这样做(仅匹配括号之间有数字的括号)。
[\d+]
步骤2:转义特殊的正则表达式字符。 []
在regex语法(字符类)中有特殊含义,因此需要转义。
\[\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);
}
}
输出:
既有当代艺术和摄影作品的永久收藏品又有临时展览。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.