我应该为以下模板使用哪种正则表达式?

What kind of regex should I use for the following template?

我正在编写一个 Java 程序来计算一个人的平均工资,并在模板中打印每月的扣除额。模板是这样的:

==============BILL==============
|  NAME: xXxX     BRANCH : xxx |
|                              |
|    Month 1 : xxx.xxx         |
|    Month 2 : xxxx.xx         |
|     <other Months>           |
|    Month 12 : xxx.xx         |
|                              |
|     TOTAL : ____________     |
================================

我正在使用以下模式尝试捕获元素:

//template is stored in string.
String[] lines = msg.split("\n");
Pattern p = Pattern.compile("[xX\._]+");
for(String line : lines){
    Matcher m = p.matcher(line);
    if(m.find()){
        System.out.println(m.group());
    }
    else{
        System.out.println("no match found...");
    }
}

我得到的输出是这样的:

xXxX
xxx.xxx
xxxx.xx
xxx.xx
____________

但是,我无法匹配 BRANCH 的 'xxx'。我如何提取该模式?

改变

if(m.find()){
    System.out.println(m.group());
}

while(m.find()){
        System.out.println(m.group());
}

因为 NAMEBRANCH 在同一行。

Matcher#find() 将在字符串中找到第一个匹配项,而不是所有匹配项。要获得所有匹配项,您必须多次调用 find()