Использование regex и android для классификации разных полей

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

Я уже завершил часть OCR, которая извлекает весь текст из образа карты имени.

Теперь мне не хватает метода regex, который может извлечь весь текст из OCR и классифицировать имя, адрес электронной почты, номер телефона в соответствующие поля в EditText.

Через некоторый googling я уже нашел формулы регулярных выражений ниже:

private static final String EMAIL_PATTERN = "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + "\\@" + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + "(" + "\\." + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+"; private static final String PHONE_PATTERN = "^[89]\\d{7}$"; private static final String NAME_PATTERN = "/^[az ,.'-]+$/i"; 

В настоящее время я просто могу извлечь адрес электронной почты, используя следующий метод:

 public String EmailValidator(String email) { Pattern pattern = Pattern.compile(EMAIL_PATTERN); Matcher matcher = pattern.matcher(email); if (matcher.find()) { return email.substring(matcher.start(), matcher.end()); } else { // TODO handle condition when input doesn't have an email address } return email; } 

Я не уверен, как отредактировать метод ^ выше, чтобы включить использование всех трех шаблонов регулярных выражений сразу и отобразить их в разные поля EditText, такие как (имя, адрес электронной почты, номер телефона).

——————————————–РЕДАКТИРОВАТЬ—– ——————————————–

После использования ответа @Styx,

Он имеет проблему с параметром, в соответствии с которым я использовал для передачи текста «textToUse» для метода, как показано ниже:

Введите описание изображения здесь

Я также пробовал передать текст во все три параметра. Но поскольку метод void , это невозможно. Или, если я изменю метод на String вместо void , для него потребуется возвращаемое значение.

Введите описание изображения здесь

Попробуйте этот код. Функция принимает текст распознавания и разбивает его с помощью символа строки прерывания. Затем запустите цикл и определите тип содержимого, выполнив проверку шаблона. Всякий раз, когда шаблон определяется, цикл переходит в следующую итерацию с использованием ключевого слова continue . Этот фрагмент кода также позволяет обрабатывать ситуацию, когда на одной визитной карточке отображается 1 или более сообщений электронной почты и номер телефона. Надеюсь, поможет. Ура!

 public void validator(String recognizeText) { Pattern emailPattern = Pattern.compile(EMAIL_PATTERN); Pattern phonePattern = Pattern.compile(PHONE_PATTERN); Pattern namePattern = Pattern.compile(NAME_PATTERN); String possibleEmail, possiblePhone, possibleName; possibleEmail = possiblePhone = possibleName = ""; Matcher matcher; String[] words = recognizeText.split("\\r?\\n"); for (String word : words) { //try to determine is the word an email by running a pattern check. matcher = emailPattern.matcher(word); if (matcher.find()) { possibleEmail = possibleEmail + word + " "; continue; } //try to determine is the word a phone number by running a pattern check. matcher = phonePattern.matcher(word); if (matcher.find()) { possiblePhone = possiblePhone + word + " "; continue; } //try to determine is the word a name by running a pattern check. matcher = namePattern.matcher(word); if (matcher.find()) { possibleName = possibleName + word + " "; continue; } } //after the loop then only set possibleEmail, possiblePhone, and possibleName into //their respective EditText here. }