[英]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
正則表達式可用於提取所有序列(即上述的sequence1
, sequence2
, sequence3
, sequence4
)? 例如, 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.