我正在尝试使用两行以上的匹配结果,这是我在文件中的文本(对于适用于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");
}
任何解决方案吗?
答案 0 :(得分:1)
我现在无法测试,但看起来你在错误的位置有边界特殊字符'^'。它试图匹配RETRAIT后跟一行后跟换行字符,当行的开头直到换行符后才开始。
更新: 使用在线java正则表达式工具,我已经能够测试这个:
^RETRAIT\s*\w+.*CARTE\s+\d{16}
在多线模式下匹配您想要的内容。 \ s特殊字符占用空格(包括回车符和换行符),比明确检查\ n或\ r \ n更具弹性。