Java RegEx для отрицания части строки в шаблоне - PullRequest
0 голосов
/ 31 августа 2018

Ниже приведен базовый метод Java, из которого я пытаюсь найти шаблон.

 public static void stringFilter() {
    int compVal = 33331;
    List<String> strList = new ArrayList<String>() {{
        add("app_Usage_RTIS/batch_id=11111/abc");
        add("ENV_RTIS/batch_id=22222/");
        add("ABCD-EFG_RTIS/batch_id=33333/");
        add("/RTIS/batch_id=44444/");
        add("/batch_id=55555/");
    }};

    Pattern pattern = Pattern.compile(".*_RTIS/batch_id=(\\d+)/.*");

    for (String s : strList) {
        Matcher matcher = pattern.matcher(s);
        if (matcher.matches()) {
            System.out.println(s + "\tTrue");
        }
    }
}

Приведенный выше код прекрасно работает для меня, чтобы выбрать строку, которая содержит "_RTIS/batch_id=123***/", но моя идея состоит в том, чтобы выбрать только строку, которая не включает "_RTIS", но с включением "/ batch_id = 123 *** /". Я пытался сделать

`Pattern pattern = Pattern.compile(".*(!_RTIS)/batch_id=(\\d+)/.*");`

Но у меня это не сработало.

Чтобы было понятно, мой вывод должен выбрать только ->

"/RTIS/batch_id=44444/" True
"/batch_id=55555/" True

Заранее спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Вы закрыли. Вы можете использовать негативный взгляд (?<!...), чтобы потребовать, чтобы перед /batch_id=(\\d+) деталью не было совпадения для _RTIS.

Так что ваше регулярное выражение может выглядеть так: ".*(?<!_RTIS)/batch_id=(\\d+)/.*".

Демо-версия:

List<String> strList = Arrays.asList(
    "app_Usage_RTIS/batch_id=11111/abc",
    "ENV_RTIS/batch_id=22222/",
    "ABCD-EFG_RTIS/batch_id=33333/",
    "/RTIS/batch_id=44444/",
    "/batch_id=55555/"
);

Pattern pattern = Pattern.compile(".*(?<!_RTIS)/batch_id=(\\d+)/.*");
for (String s : strList) {
    if (pattern.matcher(s).matches()) {
        System.out.println(s + "\tTrue");
    }
}

Выход:

/RTIS/batch_id=44444/   True
/batch_id=55555/    True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...