删除两个字符之间的字符串

时间:2016-11-29 13:49:51

标签: java regex string

我有这个字符串

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("[^.*?]", "");

但它不起作用

请问您有什么想法吗?

祝你好运

4 个答案:

答案 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)

^[]特殊字符,您需要首先进行转义,这就是为什么它不起作用的原因可以通过前缀来完成每个特殊字符\\

如果要删除[^]之间的所有内容,可以使用\\[\\^[^]]*\\]作为定义字符序列的正则表达式:

  1. [^开始,
  2. 包含0或更多除]以外的任何字符的序列,
  3. 然后]
  4. 相应的代码:

    str = str.replaceAll("\\[\\^[^]]*\\]", "");