【问题标题】:How to match two patterns in java?如何在java中匹配两个模式?
【发布时间】: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


【解决方案1】:

您可以在此处使用单个正则表达式替换:

String msg = "adg sss,data1,data2,data3,eee ack blah blah received";
Pattern r = Pattern.compile("sss(.*?)eee|ack(.*?)received");                   
Matcher m = r.matcher(msg);

while(m.find()) {
    String match = m.group(1) != null ? m.group(1) : m.group(2);
    System.out.println(match);
}

打印出来:

,data1,data2,data3,
 blah blah 

【讨论】:

    猜你喜欢
    • 2015-08-31
    • 2019-09-23
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多