Может ли слово быть ориентиром в регулярном выражении Java?

128
19 февраля 2021, 17:10

Приведу пример:

String string1 = "Owner=John Pet=Dog City=NY";
String string2 = "Owner=Steve Pet=Cat City=LA";
String string3= "Owner=Paul Pet=Hamster City=LS";
List<String> strings = new ArrayList<String>();
strings.add(string1);
strings.add(string2);
strings.add(string3);

Могу ли я как-то (с помощью регулярного выражения), вытащить все типы животных опираясь на ключевое слово "Pet"? Если нет, то какой подход лучше использовать в регулярке? Спасибо.

Answer 1

Для варианта с названием из нескольких слов

(?<=Pet=)[\w ]+(?<![ City])

В Java будет:

Matcher m = Pattern.compile("(?<=Pet=)[\w ]+(?<![ City])").matcher(str);
if (m.find()){
    String pet = m.group();
}

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

Matcher m = Pattern.compile("Owner=(.*) Pet=(.*) City=(.*)").matcher(str);
if (m.find()){
    String owner = m.group(1);
    String pet = m.group(2);
    String city = m.group(3);
}
Answer 2
Pet=(\w+) 

Первая группа вернет Dog, Cat, Hamster и тд

Answer 3

Вариант с позитивным просмотром назад:

(?<=Pet=)\w+
READ ALSO
LoadingView из нескольких методов

LoadingView из нескольких методов

Использую Moxy для реализации MVP

137
Оценить сложность функции

Оценить сложность функции

Есть функция которая перебирает в цикле входящий массив строк

123
Удалить символы в начале и конце строки

Удалить символы в начале и конце строки

Мне нужно с помощью регулярки образать все нули спереди, и один ноль в концеНаписал вот такую регулярку, но она работает не правильно str

117
Получить элемент объекта React

Получить элемент объекта React

Получаю объект с сервера и записываю его в состояние, но когда выбираю значение его элемента - Cannot read property 'id' of undefinedОбъект выглядит вот так:

85