我正在试图弄清楚如何提出一个支持以下2个用例的正则表达式:
用例1:
-- File 1 (input) --
keepthis
junkhere:
this should be removed
用例2:
-- File 2 (input) --
keepthis
------------
junkhere:
this should be removed
基本上我正在构建一个正则表达式来删除“junkhere:”和“down”中的所有内容。但是,在用例2中,有一个可选的“------------”包含在“junkhere:”之前的行中,有时但不总是(不确定的确切)
输出应为:
-- File 3 (output) --
keepthis
我有以下正则表达式,它适用于用例1但不适用于用例2:
Pattern JUNKHERE_REGEX = Pattern.compile("^(((-+)(.*))?junkhere:(.*))$", Pattern.MULTILINE | Pattern.DOTALL);
Matcher m = JUNKHERE_REGEX.matcher(<input from either file1 or file2>);
if (m.find()) || (n.find() || (o.find()) { // there could be other matchers here n and o in this case so I would like to keep the replaceall code below the same so I don't have to create a new if statement
text = m.replaceAll("");
text = text.replaceAll("[\n]+$", ""); // replace and delete any newlines
}
System.out.println(text); // should echo "keepthis"
我对正则表达式不太好但是我需要做什么才能使用例2(和用例1)?
谢谢!
答案 0 :(得分:1)
将[\n\r]+(?:[-]+[\n\r]+)?\s*junkhere:\s*[\n\r][\s\S]*
的匹配替换为空字符串。
在此处测试:http://regexr.com?37edu和此处:http://regexr.com?37ee1
在Java中,你必须加倍转义字符:
= text.replaceAll("[\\n\\r]+(?:[-]+[\\n\\r]+)?\\s*junkhere:\\s*[\\n\\r][\\s\\S]*", "");