我想要以下内容:
- 输入 -
keep this
keep this too
------ Remove Below ------
remove all of this
成为:
- 输出 -
keep this
keep this too
但是,我无法弄清楚如何匹配所有内容,直到“------删除以下------”,这样我就可以分组并移除除上述预期输出之外的所有内容。
String text = "keep this\n \n"
+ " keep this too\n ------ Remove Below ------\n remove all of this\n";
Pattern PATTERN = Pattern.compile("^(.*)(-+)(.*)Remove Below(.*)(-+)(.*)$",
Pattern.MULTILINE | Pattern.DOTALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
int count = m.groupCount();
String g0 = m.group(0);
String g1 = m.group(1); // contains "keep this\n \n keep this too\n -----"
String g2 = m.group(2);
//
// How can I group correctly to arrive at above expected -- Output --??
//
}
答案 0 :(得分:2)
制作正则表达式non-greedy
:
Pattern PATTERN = Pattern.compile("^(.*?)(-+)(.*?)Remove Below(.*?)(-+)(.*)$",
Pattern.DOTALL);
在您的情况下也不需要Pattern.MULTILINE
。
现在m.group(1)
会给你:
keep this\n \n keep this too\n
答案 1 :(得分:1)
"^(.*?)(-+)(.*)Remove Below(.*)(-+)(.*)$"
也会这样做。
答案 2 :(得分:0)
您可以使用检查“------ Remove Below ------”的索引,然后在该索引或之前取出子串 将字符串拆分为字符串数组,每行作为一个数组项
String[] split = s.split("\n");
循环遍历此数组并构造一个字符串,直到该项匹配------ Remove Below ------
String result="";
for(int i=0;i<str.length;i++){
if(!str[i].contains(" Remove Below ")){
result = result.concat(str[i]);
}else{
break;
}
}