【发布时间】:2021-10-03 00:20:33
【问题描述】:
我可以使用下面的代码在两个字符串(sss & eee)之间提取数据
例如味精: msg = "adg sss ,data1,data2,data3,eee";
Pattern r = Pattern.compile("sss(.*?)eee");
String detect_start = null;
Matcher m = r.matcher(msg) ;
while(m.find())
{
detect_start = m.group(1);
}
我在 detect_start -> ,data1,data2,data3 中得到正确的值,
现在我想匹配两个模式
模式 r = Pattern.compile("sss(.*?)eee");
模式 ack_r = Pattern.compile("ack(.?)received");
怎么做?
我在下面尝试了,但它给出了不允许的错误
匹配器 m = r.matcher(msg) || ack_r.matcher(msg) ;
我尝试了以下逻辑,但它不起作用(仅匹配第一个模式)
Pattern r = Pattern.compile("sss(.*?)eee");
Pattern ack_r = Pattern.compile("ack(.?)received");
String detect_start = null;
String detect_ack = null;
Matcher m = r.matcher(msg) ;
Matcher m_ack = ack_r.matcher(msg);
while(m.find())
{
detect_start = m.group(1);
}
while(m_ack.find());
{
detect_ack = m_ack.group(1);
}
【问题讨论】:
-
如果您想查找其中任何一种模式,您可以将它们组合起来,例如
sss(.*?)eee|ack(.?)received然后检查您是否获得了第 1 组或第 2 组(另一个为空)。或者,只需在您的 sn-p 中使用 2 个问题 - “它不起作用”虽然无济于事。您需要更具体,例如什么输入,什么预期输出,发生了什么等等。 -
另外,请查看How to Ask 并注意格式正确的问题比近距离投票更有可能吸引答案。
标签: java regex parsing pattern-matching