извлечь спецификатор c слово из строки, разделенной запятыми, в java с использованием регулярного выражения - PullRequest
0 голосов
/ 09 мая 2020

input - [1, 1111, 2020, BMW, Frontier, EXTENDED CAB PICKUP 2-DR, Silver, 16558] Я хочу извлечь здесь BMW, и я использую (^(?:[^\\,]*\\,){3}) это регулярное выражение. Это приводит к - BMW, Frontier, EXTENDED CAB PICKUP 2-DR, Silver, 16558]. Может ли кто-нибудь помочь мне с этим? заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Поскольку вы можете вводить шаблон только без использования групп, вы можете использовать конечное повторение, например {0,1000} в положительном просмотре назад, поскольку Java не поддерживает бесконечное повторение.

(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])

Объяснение

  • (?<= Положительный просмотр назад, утверждение, что слева -
    • ^\[ Начало строки, совпадение [
    • [^,]{0,1000},[^,]{0,1000},[^,]{0,1000}, Соответствует 3 раза любому символу, кроме ,, за которым следует ,
    • \h{0,10} Соответствует 0-10 раз горизонтальному пробельному символу
  • ) Близкий поиск назад
  • \w{3,10} Соответствие 3–10 символов слов
  • (?= Положительный просмотр вперед, подтверждение того, что справа -
    • [^\]\[]*\] Соответствие до ]
  • ) Закрыть просмотр вперед

Java демо

Пример кода

final String regex = "(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])";
final String string = "[1, 1111, 2020, BMW, Frontier, EXTENDED CAB PICKUP 2-DR, Silver, 16558]";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}

Выход

BMW
0 голосов
/ 09 мая 2020

Если это строка, разделенная запятыми, вы можете просто отделить функцию от класса строки, которая преобразует строку, разделенную запятыми, в массив. Ссылка - Ссылка

Метод split () строки разбивает заданную строку вокруг совпадений с заданным регулярным выражением.

Синтаксис - Publi c String [] split (String regex, int limit)

Input String: 016-78967
Regular Expression: -
Output : {"016", "78967"}

Затем вы можете найти в массиве конкретное ключевое слово.

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