我在以下块中有一个文本:
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+
它无法正常工作。
答案 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+)。
由你来完善。