簡體   English   中英

Java正則表達式多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM