正则表达式在Java中提取标记之间的文本
我需要使用RegEx提取以下文本文件中正则表达式在Java中提取标记之间的文本,java,regex,Java,Regex,我需要使用RegEx提取以下文本文件中:70:之后的值。值也可能包含换行符 我目前的解决方案是提取:70:和:之间的字符串,但这总是只返回一个匹配项,即第一个:70:和最后一个:之间的整个文本 :32B:xxx, :59:yyy something :70:ACK1 ACK2 :21:something :71A:something :23E:something value :70:ACK2 ACK3 :71A:something 如何使用Java实现这一点?理想情况下,我希望遍历所有值,即
:70:
之后的值。值也可能包含换行符
我目前的解决方案是提取:70:
和:
之间的字符串,但这总是只返回一个匹配项,即第一个:70:
和最后一个:
之间的整个文本
:32B:xxx,
:59:yyy
something
:70:ACK1
ACK2
:21:something
:71A:something
:23E:something
value
:70:ACK2
ACK3
:71A:something
如何使用Java实现这一点?理想情况下,我希望遍历所有值,即
ACK1\nACK2
,
ACK2\nACK3
谢谢:)
编辑:我现在在做什么
Pattern pattern = Pattern.compile("(?<=:70:)(.*)(?=\n)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
System.out.println(matcher.group())
}
Pattern=Pattern.compile((?您需要一个循环来完成此操作
Pattern p = Pattern.compile(regexPattern);
List<String> list = new ArrayList<String>();
Matcher m = p.matches(input);
while (m.find()) {
list.add(m.group());
}
Pattern p=Pattern.compile(regexpatern);
列表=新的ArrayList();
匹配器m=p.匹配(输入);
while(m.find()){
list.add(m.group());
}
如图所示,试试这个
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));
结果:
found=ACK1
ACK2
found=ACK2
ACK3
@Jens添加了我当前的解决方案。您希望输入的32B
还是只32
?@PavneetSingh我只需要ACK1\nACK2
和ACK2\nACK3
。不关心其他任何事情。;)如果您确定:
始终只用作分隔符,您可以简单地使用(?@SebastianProske有效!谢谢:)我已经在做了,但是matcher.find()
只找到了一个匹配项。:(请检查我当前的解决方案。我将其添加到问题中。我在提供的解决方案中没有看到循环。我有while(matcher.find()){}
在创建了匹配器之后
。我认为这个问题与我的正则表达式有关,因为我只得到一个匹配项。如果你的循环是空的,那么你就没有把结果放在一起。列表.add(m.group())
很重要。不,我的循环不是空的;我使用的是从m.group()返回的值
-–更新了问题以澄清这一点。