我有这个字符串
test this a [^architecture.jpg] lorem epsum lorem epsum [^rct.png] lorem epsum
我需要删除[^和]
之间的字符串获得类似
的内容test this a
lorem epsum
lorem epsum
lorem epsum
我在JAVA中试过这个正则表达式
str = str.replaceAll("[^.*?]", "");
但它不起作用
请问您有什么想法吗?
祝你好运
答案 0 :(得分:3)
这种情况正在发生,因为你没有逃避这些角色:[]^
,所以他们被视为正则表达式中的特殊字符。基本上,现在它正在替换任何不是.
,*
或?
的字符,这只会留下两个句点。只需在每个\\
之前添加str = str.replaceAll("\\[\\^.*?\\]", "");
即可逃脱它们,它会像您想要的那样工作。
section a
答案 1 :(得分:2)
你的正则表达式不正确
使用类似
的内容String str = "test this a [^architecture.jpg]" + "lorem epsum" + "lorem epsum" + "[^rct.png]" + "lorem epsum";
String foo = "(?s)\\[\\^.+?\\]";
System.out.println(str.replaceAll(foo, ""));
输出是:
测试这个lorem epsumlorem epsumlorem epsum
答案 2 :(得分:1)
只需添加\\,字符串将显示为
str = str.replaceAll("\\[\\^.*?\\]", "");
答案 3 :(得分:1)
^
,[
和]
是特殊字符,您需要首先进行转义,这就是为什么它不起作用的原因可以通过前缀来完成每个特殊字符\\
。
如果要删除[^
和]
之间的所有内容,可以使用\\[\\^[^]]*\\]
作为定义字符序列的正则表达式:
[^
开始,0
或更多除]
以外的任何字符的序列,]
:相应的代码:
str = str.replaceAll("\\[\\^[^]]*\\]", "");