为了账号安全,请及时绑定邮箱和手机立即绑定

如何为以下字符串编写正则表达式?

如何为以下字符串编写正则表达式?

九州编程 2023-03-09 11:32:43
在给定的字符串中,我只想在“ENERGY:”之后提取字符串1562173405047|INFO|MyHalfDuplexModem@30:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999788799994675071125   T   {-s 1, -d 2 }1562173405552|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 3 -d 2 -b 96 -e 9.999779196127731100294   R   {-s 3, -d 2 }1562173406122|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999764796127731100294   R   {-s 1, -d 2 }1562173406194|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 2 -d 1 -b 96 -e 9.999759995924876667052   T   {-s 2, -d 1 }这是我的代码:public static void main(String[] args) {    //movies = new ArrayList<movie>();       realPath = "Z:\\UNET\\3 NODE 1 SOURCE\\log-0.txt";       File f = new File(realPath);       if ( !f.exists()) {          System.err.println("file path not specified");       }       try {        String regex1 = "[0-9]+\|INFO\|MyHalfDuplexModem@[0-9]+:println\|ENERGY:";        Scanner sc = new Scanner(f);            while (sc.hasNextLine()) {                String nextLine = sc.nextLine();                if ( !nextLine.matches(regex1)) {                     System.out.println(nextLine);                }            }            //   sc.close();         } catch(Exception e) {              throw new RuntimeException(e);         }       }我尝试了以下正则表达式,但它不起作用: regex1 = "[0-9]+[|]INFO[|]MyHalfDuplexModem@[0-9]+:println|ENERGY:";
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

稍微逃避你应该是好的:


regex1 = "[0-9]+\|INFO\|MyHalfDuplexModem@[0-9]+:println\|ENERGY:";

                                                        ^^ this was the problem

                                                        |

                                                        `- this is the fix

没有逃逸|是一种交替,有效地导致"[0-9]+|INFO|MyHalfDuplexModem@[0-9]+:println" OR "ENERGY:"


另请注意,它\|与[|]. 我更喜欢前者。


查看完整回答
反对 回复 2023-03-09
?
慕森王

TA贡献1777条经验 获得超3个赞

我想,这一个抓住了你想要的。它不是在 Java 中,它是纯正则表达式。


ENERGY:\s(.*)


这是Java示例


public static void main(String[] args) {

    Pattern p = Pattern.compile("ENERGY:\\s(.*)");

    String st = "1562173405047|INFO|MyHalfDuplexModem@30:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999788799994675071125   T   {-s 1, -d 2 }\n" +

            "1562173405552|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 3 -d 2 -b 96 -e 9.999779196127731100294   R   {-s 3, -d 2 }\n" +

            "1562173406122|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999764796127731100294   R   {-s 1, -d 2 }\n" +

            "1562173406194|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 2 -d 1 -b 96 -e 9.999759995924876667052   T   {-s 2, -d 1 }";

    Matcher mt = p.matcher(st);


    while (mt.find()) {

        String group = mt.group(1);

        System.out.println(group);

    }

}

输出:


-s 1 -d 2 -b 288 -e 9.999788799994675071125   T   {-s 1, -d 2 }

-s 3 -d 2 -b 96 -e 9.999779196127731100294   R   {-s 3, -d 2 }

-s 1 -d 2 -b 288 -e 9.999764796127731100294   R   {-s 1, -d 2 }

-s 2 -d 1 -b 96 -e 9.999759995924876667052   T   {-s 2, -d 1 }


查看完整回答
反对 回复 2023-03-09
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信