我有以下输入:
-- input --
Keep this
Chomp this
ChompHere:
Anything below gets chomped
我需要输出看起来像:
-- output (expected) --
Keep this
现在我根据以下代码得到以下内容:
-- output (actual) --
Keep this
Chomp this
ASK :如何删除正则表达式匹配的上一行(Chomp this):
public void chompPreviousLine() {
String text = "Keep this\n"
+ "Chomp this\nChompHere:\nAnything below gets chomped";
Pattern CHOMP= Pattern.compile("^(ChompHere:(.*))$", Pattern.MULTILINE | Pattern.DOTALL);
Matcher m = CHOMP.matcher(text);
if (m.find()) {
// chomp everything below and one line above!
text = m.replaceAll("");
// but....??? how to delete the previous line ???
text = text .replaceAll("[\n]+$", ""); // delete any remaining /n
System.out.println(text);
}
}
答案 0 :(得分:1)
您可以修改正则表达式,使其也可以获取上一行:
Pattern CHOMP= Pattern.compile("[^\n]+\nChompHere:(.*)", Pattern.MULTILINE | Pattern.DOTALL);
[^\n]+\n
将匹配任何不是行尾字符的连续字符,然后匹配行尾本身。由于它位于正则表达式中ChompHere
之前,因此它将匹配ChompHere
之前的完整行。
我已经删除了括号,因为你没有在算法中真正使用组;你确实在替换整个匹配的文本。
答案 1 :(得分:0)
你可以使用积极的预测:
^(.*)(?=ChompHere:)
根据您是否希望换行符匹配,您必须将其添加到前瞻。
但是一个简单的解析器不会更容易吗?