[英]Java Regular Expression Multiline
我試圖獲得兩行或更多行的匹配結果,這是我在文件中的文本(用於Wincor ATM的Journal Entries):
DEMANDE SOLDE N° CARTE : 1500000001180006 OPERATION NO. : 585068 ======================================== RETRAIT N° CARTE 1600001002200006 OPERATION NO. : 585302 MONTANT : MAD 200.00 ======================================== ... etc.
還有為每個操作重復的更多行:retrait(ATM),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");
}
有什么解決辦法嗎?
我現在無法測試,但看來您在錯誤的位置輸入了特殊字符'^'。 當行的開始直到換行符之后才開始時,它嘗試匹配RETRAIT,然后再匹配行的開頭,后跟換行符。
更新:使用在線java regex工具,我已經可以測試以下內容:
^RETRAIT\s*\w+.*CARTE\s+\d{16}
在多行模式下與您想要的匹配。 \\ s特殊字符占用空白(包括回車符和換行符),這比顯式檢查\\ n或\\ r更具彈性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.