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

在给定的字符串中,我只想在“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:";


九州编程
浏览 174回答 2
2回答

慕斯王

稍微逃避你应该是好的:regex1 = "[0-9]+\|INFO\|MyHalfDuplexModem@[0-9]+:println\|ENERGY:";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^^ this was the problem&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `- this is the fix没有逃逸|是一种交替,有效地导致"[0-9]+|INFO|MyHalfDuplexModem@[0-9]+:println" OR "ENERGY:"另请注意,它\|与[|]. 我更喜欢前者。

慕森王

我想,这一个抓住了你想要的。它不是在 Java 中,它是纯正则表达式。ENERGY:\s(.*)这是Java示例public static void main(String[] args) {&nbsp; &nbsp; Pattern p = Pattern.compile("ENERGY:\\s(.*)");&nbsp; &nbsp; String st = "1562173405047|INFO|MyHalfDuplexModem@30:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999788799994675071125&nbsp; &nbsp;T&nbsp; &nbsp;{-s 1, -d 2 }\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "1562173405552|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 3 -d 2 -b 96 -e 9.999779196127731100294&nbsp; &nbsp;R&nbsp; &nbsp;{-s 3, -d 2 }\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "1562173406122|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 1 -d 2 -b 288 -e 9.999764796127731100294&nbsp; &nbsp;R&nbsp; &nbsp;{-s 1, -d 2 }\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "1562173406194|INFO|MyHalfDuplexModem@43:println|ENERGY: -s 2 -d 1 -b 96 -e 9.999759995924876667052&nbsp; &nbsp;T&nbsp; &nbsp;{-s 2, -d 1 }";&nbsp; &nbsp; Matcher mt = p.matcher(st);&nbsp; &nbsp; while (mt.find()) {&nbsp; &nbsp; &nbsp; &nbsp; String group = mt.group(1);&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(group);&nbsp; &nbsp; }}输出:-s 1 -d 2 -b 288 -e 9.999788799994675071125&nbsp; &nbsp;T&nbsp; &nbsp;{-s 1, -d 2 }-s 3 -d 2 -b 96 -e 9.999779196127731100294&nbsp; &nbsp;R&nbsp; &nbsp;{-s 3, -d 2 }-s 1 -d 2 -b 288 -e 9.999764796127731100294&nbsp; &nbsp;R&nbsp; &nbsp;{-s 1, -d 2 }-s 2 -d 1 -b 96 -e 9.999759995924876667052&nbsp; &nbsp;T&nbsp; &nbsp;{-s 2, -d 1 }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java