Как написать регулярное выражение для следующих строк? - PullRequest
0 голосов
/ 05 июля 2019

В данных строках я просто хочу извлечь строки после "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 ]

2 голосов
/ 05 июля 2019

С небольшим количеством побега вы должны быть хороши:

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:"

Также обратите внимание, что \| идентичен [|].Я предпочитаю первое.

0 голосов
/ 05 июля 2019

Я думаю, этот захватывает то, что вы хотите. Это не в 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...