Java正则表达式多行

时间:2014-06-05 15:46:39

标签: java regex

我正在尝试使用两行以上的匹配结果,这是我在文件中的文本(对于适用于Wincor ATM的JOURNAL ENTRIES):

DEMANDE SOLDE
N° CARTE  : 1500000001180006
OPERATION NO.  : 585068
========================================
RETRAIT
N° CARTE   1600001002200006
OPERATION NO.  : 585302
MONTANT   :  MAD 200.00
========================================
... etc.

每次操作都会重复更多行:重新调整(ATMs),demande de solde(余额查询),我希望得到如下结果:RETRAIT \ nN°CARTE 1600001002200006 我的java代码:

String filename="20140604.jrn";
File file=new File(filename);
String regexe = ".*RETRAIT^\r\n.*CARTE.*\\d{16}"; // Work with .*CARTE.*\\d{16}: result: N° CARTE  :      1500000001180006 N° CARTE         1600001002200006
Pattern pattern = Pattern.compile(regexe,Pattern.MULTILINE);
try {
    BufferedReader in = new BufferedReader(new FileReader(file));
while (in.ready()) {
    String s = in.readLine();
    Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {     // find the next match           
         System.out.println("found the pattern \"" + matcher.group());          
      }
    }
        in.close();        
    }        
    catch(IOException e) {
        System.out.println("File 20140604.jrn not found");
    }

任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

我现在无法测试,但看起来你在错误的位置有边界特殊字符'^'。它试图匹配RETRAIT后跟一行后跟换行字符,当行的开头直到换行符后才开始。

更新: 使用在线java正则表达式工具,我已经能够测试这个:

^RETRAIT\s*\w+.*CARTE\s+\d{16}

在多线模式下匹配您想要的内容。 \ s特殊字符占用空格(包括回车符和换行符),比明确检查\ n或\ r \ n更具弹性。