如何在两个特定字符串之间获取文本

时间:2017-03-01 11:19:57

标签: java regex string

我想获取文本和特定字符串,直到它与另一个字符串匹配。我有 “门号:5 在这扇门后面bla bla bla ...

门号:6 在这个门后面bla bla bla“ 我需要得到“门号:5 在这扇门后面bla bla bla ...“

String str = " Door 51 text1 Door 61 text2 Door 10 text3";
        Pattern pattern = Pattern.compile("\\s\\bPage\\b\\s\\d+(.*?)\\s\\bPage\\b\\s\\d+");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }

这是我的代码,但是当我运行它时我只得到text1。我需要Door 51 text1,Door 61 text2,Door 10 text3。

1 个答案:

答案 0 :(得分:3)

由于匹配结果重叠,您需要在(.*?)之后使用前瞻而不是消费模式:

\bDoor\s+\d+(.*?)(?=\bDoor\s+\d+|$)
                 ^^^^^^^^^^^^^^^^^^ 

请参阅regex demo

(?=\bDoor\s+\d+|$)预测将需要字符串$Door(作为整个单词),1 +空格(\s+)和1+位数({ {1}})除了换行符(\d+)之外的任何0+字符之后。请注意.*?中的单词边界没有意义,因为r\b\s与单词char不匹配,所以我稍微调整了模式。

Java demo

\s

alternative solution String str = " Door 51 text1 Door 61 text2 Door 10 text3"; Pattern pattern = Pattern.compile("\\bDoor\\s+\\d+(.*?)(?=\\bDoor\\s+\\d+|$)"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group(1)); }

split