在空行之间匹配文本

时间:2015-12-03 13:10:55

标签: java regex text

我在以下块中有一个文本:

AAAAAAA
BBBBBBB
CCCCCCC

DDDDDD.    YYYYYYYYYYYYYYYYYYYYYY                
EEEEE 1234567890                              

Some random text
Some text random
Random text
Text 
Some random text

ZZZZZZZZZZZZZZZZ
UUUUUUUUUUUUUUUU

如何使用正则表达式选择以下阻止

Some random text
Some text random
Random text
Text 
Some random text

从原始文字中我知道这个DDDDDD. YYYYYYYYYYYYYYYYYYYYYY行之后,后面跟着行EEEEE 1234567890,而也是在仅包含\ s符号的行之间。

我尝试过模式DDDDDD.*\\s+(.*)\\s+它无法正常工作。

1 个答案:

答案 0 :(得分:2)

您可以使用以下Pattern来匹配您的预期文字:

String text = "AAAAAAA\nBBBBBBB\nCCCCCCC\n\nDDDDDD.    YYYYYYYYYYYYYYYYYYYYYY                "
    + "\nEEEEE 1234567890                              "
    + "\n\nSome random text\nSome text random\nRandom text\nText \nSome random text\n\n"
    + "ZZZZZZZZZZZZZZZZ\nUUUUUUUUUUUUUUUU";
Pattern p = Pattern.compile(
 // | 6 "D"s
 // |    | actual dot
 // |    |  | some whitespace
 // |    |  |   | 22 "Y"s
 // |    |  |   |    | more whitespace
 // |    |  |   |    |   | optional: 
 // |    |  |   |    |   || 5 "E"s
 // |    |  |   |    |   ||   | whitespace
 // |    |  |   |    |   ||   |  | 10 digits
 // |    |  |   |    |   ||   |  |      | more whitespace including line breaks
 // |    |  |   |    |   ||   |  |      |      | your text
 // |    |  |   |    |   ||   |  |      |      |    | followed by any "Z" sequence
    "D{6}\\.\\s+Y{22}\\s+(E{5}\\s\\d{10}\\s+)?(.+?)(?=Z+)", 
    Pattern.DOTALL
);
Matcher m = p.matcher(text);
if (m.find()) {
    System.out.println(m.group(2));
}

<强>输出

Some random text
Some text random
Random text
Text 
Some random text

注意

不确定如何划分最终部分,所以我只使用了大写的Z序列(1+)。

由你来完善。