在过去的几个小时里,我一直在努力创建一个正则表达式,在选择评级后删除以特定字词开头的文本行。
以下是我要删除的内容。我也试图将评级从段落中拉出来(通过或失败)。
Review Master: text here
1111111111 text here
Rating: Fail text here
Review Master Page text here
我正在尝试删除以下开头的所有行。 我有
^Review Master:
^[0-9]{10}
^Rating:
^Review Master Page
同样,我正在努力替换(删除)并仅查找评级。
答案 0 :(得分:2)
如果您想在文件中找到这些确切的行,那么这将有效:
Review Master:\n\\d++\nRating:\\s*+(\\w++)\nReview Master Page"
以下是使用输入作为测试字符串的示例:
public static void main(String[] args) throws Exception {
final String in = "Review Master:\n"
+ "1111111111\n"
+ "Rating: Fail\n"
+ "Review Master Page";
final Matcher m = Pattern.compile(""
+ "Review Master:\n"
+ "\\d++\n"
+ "Rating:\\s*+(\\w++)\n"
+ "Review Master Page").matcher(in);
while(m.find()) {
System.out.println(m.group(1));
}
}
输出:
Fail
如果您要删除这些行,则需要将文件中的模式替换为String
:
public static void main(String[] args) throws Exception {
final String in = "Some other text\n"
+ "Review Master:\n"
+ "1111111111\n"
+ "Rating: Fail\n"
+ "Review Master Page\n"
+ "Some final text";
final Matcher m = Pattern.compile(""
+ "\n?"
+ "Review Master:\n"
+ "\\d++\n"
+ "Rating:\\s*+(\\w++)\n"
+ "Review Master Page").matcher(in);
final StringBuffer output = new StringBuffer();
while (m.find()) {
System.out.println(m.group(1));
m.appendReplacement(output, "");
}
m.appendTail(output);
System.out.println("Result: \"" + output.toString() + "\"");
}
输出:
Fail
Result: "Some other text
Some final text"
即。我们使用Matcher
从输入中提取通过/失败,并构建输出,替换与任何内容匹配的文本块。
您尚未明确哪些模式部分是可变的。