从行中提取文本所需的java正则表达式帮助
我有以下文字:
:10A: <any characters here>\r\n
<any characters here>\r\n
<any characters here>\r\n
.
.
.
:11A: or :12P:
两个“:XXX:”标志(包括第一行)之间最多可以有10行。 我需要提取(只使用正则表达式,不使用Java方法)第一到四行(包括第一行,不带“:10A:”)
例1:
:10A: Line number 1\r\n
Line number 2\r\n
Line number 3\r\n
Line number 4\r\n
Line number 5\r\n
Line number 6\r\n
:11A:
将摘录:
Line number 1\r\n
Line number 2\r\n
Line number 3\r\n
Line number 4\r\n
例2:
:10A: Line number 1\r\n
Line number 2\r\n
:12P:
将摘录:
Line number 1\r\n
Line number 2\r\n
任何帮助都将不胜感激
谢谢
# 1 楼答案
一开始可能是正则表达式:
第一个匹配组将返回最多四行文本
重要提示:必须在Java中打开“dotall”选项,如
Pattern.compile(pStr, Pattern.DOTALL)
或类似选项(Perl中的单行模式/.../s
或.NET中的RegexOptions.Singleline
),否则正则表达式将无法工作,因为您正在处理多行数据# 2 楼答案
你可以用这个正则表达式
# 3 楼答案
描述
此表达式将捕获每个部分的前4行文本
^:[^:]*:(.*?(?:^(?:(?!^:[^:]*:|[\r\n]|\Z).)*[\r\n\Z]*){3})
扩大
^:[^:]*:
匹配分节符.*?
匹配与分节符位于同一行的文本行(?
此捕获组将匹配不是分段符的整行^
匹配行的开头(?:(?!^:[^:]*:|[\r\n]|\Z).)*
匹配行中的所有字符,前提是它们不是节标题、新行字符或字符串的结尾[\r\n\Z]*
匹配任意数量的新行字符或字符串结尾){3}
尝试匹配其中三行。注意:内部条件是自动限制的,将阻止捕获更多的线,而不是一个部分可能包含的线李>Java代码示例:
输入文本
代码
匹配 这只是显示捕获组1。捕获组0是整个匹配字符串