java - 通过正则表达式从字符串中删除文本

标签 java regex

在 Java 中,我想通过正则表达式从以下字符串中删除一些文本:

someText

begin
  .someMethod()
  .doSomething(TOKEN_123)
  .someMethod()
end

begin
  .someMethod()
  .doSomething(TOKEN_456)
  .someMethod()
end

begin
  .someMethod()
  .doSomething(TOKEN_789)
  .someMethod()
end

more Text

我想删除包含字符串 TOKEN_456 的第二个开始/结束 block 。

目前我的正则表达式如下所示

begin.*TOKEN_456(.*?)end

但是这个删除了第一个和第二个 block 。

有人可以帮忙吗?

问候

最佳答案

你可以使用

str = str.replaceFirst("(?s)begin(?:(?!begin).)*TOKEN_456.*?end\\s*", ""));

请参阅 IDEONE demo 和 a regex demo

正则表达式匹配:

  • (?s) - 单行修饰符
  • begin - 匹配前导边界,字符序列begin
  • (?:(?!begin).)* - 一个调和的贪婪标记,匹配任何不以 begin 开头的文本
  • TOKEN_456 - 要匹配的文字字符序列
  • .*?end - 尽可能少的任意数量的任意字符,直到最接近的 end
  • \\s* - 0 个或多个空格(用于修剪目的)。

关于java - 通过正则表达式从字符串中删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083659/

相关文章:

java - 如何减小我的 Android 应用程序的大小?

java - JCheckBox 的问题在 Java 的 JList 中检查了切换逻辑

java - 未找到 XmlElement 注释

java - 将MongoDB用作hadoop map-reduce作业的I/O

php - 从维基百科模板获取参数

ios - 检查邮政编码是否在范围内

python - 在正则表达式(python)中使用值为整数的变量

java - Porter2 Stemming Java 实现查询

regex - 使用正则表达式提取堆栈跟踪的最后 'Caused by'

javascript - Firefox 扩展如何将字符串类型变量传递给 javascript 替换正则表达式参数?