[英]RegEx to extract text between tags in Java
I need to extract the values after :70:
in the following text file using RegEx. 我需要使用RegEx在以下文本文件中提取
:70:
之后的值。 Value may contain line breaks as well. 值也可能包含换行符。
My current solution is to extract the string between :70:
and :
but this always returns only one match, the whole text between the first :70:
and last :
. 我当前的解决方案是提取
:70:
和:
之间的字符串,但这总是只返回一个匹配项,即第一个:70:
和last :
之间的整个文本。
:32B:xxx,
:59:yyy
something
:70:ACK1
ACK2
:21:something
:71A:something
:23E:something
value
:70:ACK2
ACK3
:71A:something
How can I achive this using Java? 如何使用Java实现此目的? Ideally I want to iterate through all values, ie
理想情况下,我想遍历所有值,即
ACK1\\nACK2
, ACK2\\nACK3
ACK1\\nACK2
, ACK2\\nACK3
Thanks :) 谢谢 :)
Edit: What I'm doing right now, 编辑:我现在在做什么,
Pattern pattern = Pattern.compile("(?<=:70:)(.*)(?=\n)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
System.out.println(matcher.group())
}
Try this. 尝试这个。
String data = ""
+ ":32B:xxx,\n"
+ ":59:yyy\n"
+ "something\n"
+ ":70:ACK1\n"
+ "ACK2\n"
+ ":21:something\n"
+ ":71A:something\n"
+ ":23E:something\n"
+ "value\n"
+ ":70:ACK2\n"
+ "ACK3\n"
+ ":71A:something\n";
Pattern pattern = Pattern.compile(":70:(.*?)\\s*:", Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find())
System.out.println("found="+ matcher.group(1));
result: 结果:
found=ACK1
ACK2
found=ACK2
ACK3
You need a loop to do this. 您需要执行一个循环。
Pattern p = Pattern.compile(regexPattern);
List<String> list = new ArrayList<String>();
Matcher m = p.matches(input);
while (m.find()) {
list.add(m.group());
}
As seen here Create array of regex matches 如此处所示, 创建正则表达式匹配数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.