簡體   English   中英

Java正則表達式跨多行提取文本序列

[英]Java regex to extract text sequences across multiple lines

給出一段文字摘錄,例如

Preface (optional, up to multiple lines)
Main : sequence1
   sequence2
   sequence3
   sequence4
Epilogue (optional, up to multiple lines)

哪個Java正則表達式可用於提取所有序列(即上述的sequence1sequence2sequence3sequence4 )? 例如, Matcher.find()循環?

每個“序列”前面都有,也可以包含0或多個空格(包括制表符)。

以下正則表達式

(?m).*Main(?:[ |t]+:(?:[ |t]+(\S+)[\r\n])+

僅產生第一個序列( sequence1 )。

您可以使用以下正則表達式

(?m)(?:\G(?!\A)[^\S\r\n]+|^Main\s*:\s*)(\S+)\r?\n?

詳細資料

  • (?m) -多行模式開啟
  • (?:\\G(?!\\A)[^\\S\\r\\n]+|^Main\\s*:\\s*) -兩者之一:
    • \\G(?!\\A)[^\\S\\r\\n]+ -上一次成功匹配的結尾( \\G(?!\\A) ),然后是1+水平空白( [^\\S\\r\\n]+ ,可以替換為[\\p{Zs}\\t]+[\\s&&[^\\r\\n]]+
    • | - 要么
    • ^Main\\s*:\\s* -行的開頭, Main ,0+個空格, : ,0+個空格
  • (\\S+) -組1捕獲1+個非空白符號
  • \\r?\\n? -可選的CR和可選的LF。

請參見下面的Java代碼:

String p = "(?m)(?:\\G(?!\\A)[^\\S\r\n]+|^Main\\s*:\\s*)(\\S+)\r?\n?";
String s = "Preface (optional, up to multiple lines)...\nMain : sequence1\n   sequence2\n   sequence3\n   sequence4\nEpilogue (optional, up to multiple lines)";
Matcher m = Pattern.compile(p).matcher(s);
while(m.find()) {
    System.out.println(m.group(1));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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