在 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/