【问题标题】:Java Regex to replace text between braces {...} including newline [duplicate]Java正则表达式替换大括号{...}之间的文本,包括换行符[重复]
【发布时间】:2016-09-20 19:46:17
【问题描述】:

如何在 java 中用正则表达式替换大括号 {...} 之间的文本,包括换行符?

我已经看到很多关于删除括号内文本的相关问题,但这里的主要问题是,如果匹配中间有一个新行,它似乎有点不匹配。

感谢任何有关如何正确执行此操作的帮助,谢谢!

例子:

输入:

text 1 {
text 2
text 3
}

替换后的输出:

text1

【问题讨论】:

  • 使用System.out.println("text 1 {\ntext 2\ntext 3\n}".replaceAll("(?s)\\{.*\\}", ""));
  • stackoverflow.com/questions/6500036/…你可以使用PATTERN.DOTALL或前置(?s)
  • 由于您声明 Open-Clos 大括号,它散发出平衡文本的味道。否则,为什么不直接匹配}{。语言中没有不解析 nesting 语法的真正构造。 Java 不支持它。继续前进,没什么可看的……

标签: java regex string replace replaceall


【解决方案1】:

学到了。不是字面上的每一个字符。

我正在使用

string = string.replaceAll("\\{(.|\\n|\\r|\\t)*?\\}","");

现在它正在工作。

【讨论】:

  • Java 不支持s 修饰符吗?这将使. 匹配任何字符。
  • 使用System.out.println("text 1 {\ntext 2\ntext 3\n}".replaceAll("(?s)\\{.*\\}", ""));
  • 嗯,最好的方法是使用否定字符类:"\\{[^{}]*}"
【解决方案2】:

你可以这样做:

string=string.replaceAll("\\{(.|\n)*?\\}","");

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多