匹配所有以空格开头的行,直到不以空格开头的行

时间:2014-09-04 01:05:31

标签: java regex pattern-matching regex-negation

所以我有几行这样的话:

tag1:
 line1word1 lineoneanychar
 line2word1
tag2:
 line1word1 ....
 line2word1 .....

我正在尝试构建一个java正则表达式,它提取标签下的所有数据。即:

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));
    }

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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是一个数字

\ s空格

(?:something)用于组成一个不会成为匹配器中真正“组”的组