Java 匹配所有以空格开头的行,直到不以空格开头的行
我有几行这样的话:Java 匹配所有以空格开头的行,直到不以空格开头的行,java,regex,pattern-matching,regex-negation,Java,Regex,Pattern Matching,Regex Negation,我有几行这样的话: tag1: line1word1 lineoneanychar line2word1 tag2: line1word1 .... line2word1 ..... 我正试图构建一个java正则表达式来提取标记下的所有数据。i、 e: String parsed1 = line1word1 lineone\nline2word1 String parsed2 = line1word1 ....\nline2word1 ..... 我相信正确的方法是使用这样的东西,但
tag1:
line1word1 lineoneanychar
line2word1
tag2:
line1word1 ....
line2word1 .....
我正试图构建一个java正则表达式来提取标记下的所有数据。i、 e:
String parsed1 = line1word1 lineone\nline2word1
String parsed2 = line1word1 ....\nline2word1 .....
我相信正确的方法是使用这样的东西,但我没有完全正确:
Pattern p = Pattern.compile("tag1:\n( {1}.*)\n(?!\\w+)", Pattern.DOTALL);
Matcher m = p.matcher(clean_data);
if(m.find()){
System.out.println(m.group(1));
}
任何帮助都将不胜感激 可能是这样的
public static void main(String[] args) throws Exception {
String input = "tag1:\n"
+ " line1word1 lineoneanychar\n"
+ " line2word1\n"
+ "tag2:\n"
+ " line1word1 ....\n"
+ " line2word1 .....\n";
Pattern p = Pattern.compile("tag\\d+:$\\n((?:^\\s.*?$\\n)+)", Pattern.DOTALL|Pattern.MULTILINE);
Matcher m = p.matcher(input);
while(m.find()){
System.out.println(m.group(1));
}
}
记住在正则表达式中转义\\
\d是一个数字
\这是一个空间
(?:something)用于创建一个在matcher中不是真正的“组”的组所以我得到了大部分正则表达式,但是,$do做什么呢?我意识到美元通常是账单的结尾。所以(?:^\\s.*?$\\n)是-->只要一行不是以空格开头,后跟任何东西,并且[?]以换行结束?与行尾字符($)无关,但表示。*是非贪婪的。否则,.*将匹配所有内容,直到整个字符串结束