Поиск значения REGEX в тексте - PullRequest
0 голосов
/ 02 мая 2020

Я создаю этот метод для поиска в тексте только номера сервисного заказа, эта информация может находиться в любом месте текста, потому что это открытое поле для ввода, мне нужно только первое найденное значение, если у вас более одного Сервисный заказ. пример текста:

Пожалуйста, проверьте номер сервисного заказа 1-202012345678 для ремонта автомобиля Toyota Corolla красного цвета

Может ли кто-нибудь помочь мне найти ошибку?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Encontra_Ordem {

    private static final Pattern PATTERN = Pattern.compile(".*([1@][-@]\\d{12}).*"); 

    public static String buscaordemnotexto(String texto) {
        String valor = "";
        Matcher matcher = PATTERN.matcher(texto);
        if(matcher.matches() && matcher.groupCount() == 1){
            String numerodaordem = matcher.group(1);
            valor += numerodaordem;

        } 
        return valor;
    }
}

1 Ответ

3 голосов
/ 02 мая 2020

С учетом данных я бы предложил это решение:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Encontra_Ordem {

    private static final Pattern PATTERN = Pattern.compile("\\b\\d-\\d{12}\\b");

    public static String buscaordemnotexto(String texto) {
        String valor = "";
        Matcher matcher = PATTERN.matcher(texto);
        if (matcher.find()) { 
            String numerodaordem = matcher.group();
            valor += numerodaordem;
        }
        return valor;
    }

    public static void main(String[] args) {
        System.out.println(buscaordemnotexto("asda sd asd asd asd  sa 2-202012345678 ttttttt 1-202012345678"));
    }

}

Вывод

2-202012345678

Пояснение

Вот описание RegEx, которое я написал (нажмите на него, чтобы сделать его более читабельным):
Courtesy of https://regexr.com

Я также использовал matcher.find () внутри if блокировать таким образом, чтобы содержимое matcher.group () было первым совпадением RegEx.

Метод find ()

Проще говоря, поиск ( ) метод пытается найти вхождение шаблона регулярного выражения в заданной строке. Если в строке найдено несколько вхождений, то первый вызов find () перейдет к первому вхождению. После этого каждый последующий вызов метода find () будет go переходить к следующему совпадению, один за другим.

Источники

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