Java Строка формата Regex - PullRequest
0 голосов
/ 30 марта 2020

Я новичок в Java и регулярное выражение. Я пытаюсь извлечь данные из следующей строки:

JAMMURI YA KENYA ¢)a(s REPUBLIC OF KENYA
sennc wnecs: 23085129 aShl e 31662252
FULL NAMES
JUDITH AWINO OWITI
DATE OF BIRTH
25. 10. 1992
SEX
FEMALE
DISTRICT OF BIRTH
MUHORONI
PLACE OF ISSUE
. NYANDO
DATE OF ISSUE
' 16.04. 2013 A
j HOLDER'S SIGN oo - Ve

Где: 23085129 = IDNumber, 31662252 = SerialNumber, JUDITH AWINO OWITI = Name, 25. 10. 1992 = DateOfBirth

Вот мой код:

static HashMap<String, String> interpretText(String ocrText) {
        HashMap<String, String> result = new HashMap<String, String>();
        result.put("Text", ocrText);

        for (String text : ocrText.split("\\r?\\n")) {      
            //Get ID Only
            String pattern = "\\s+([0-9]{9})";
            Pattern r = Pattern.compile(pattern);
            Matcher m = r.matcher(text);
            if (m.find()) {
                System.out.println("IDNumber: " + m.group(0) );
                result.put("IDNumber", m.group(0));
            }

            // Get all other numbers
            pattern  = "(\\d+)(.*)";
            r = Pattern.compile(pattern);
            m = r.matcher(text);
            if (m.find()) {
                 System.out.println("Found value: " + m.group() );
            }

        }
        return result;
    }

Моя задача заключается в том, как извлечь вышеупомянутые ключевые элементы данных из строки. Моя реализация регулярных выражений не работает. Какова правильная реализация регулярного выражения для 23085129 = IDNumber, 31662252 = SerialNumber, JUDITH AWINO OWITI = Name, 25. 10. 1992 = DateOfBirth в l oop?

1 Ответ

0 голосов
/ 30 марта 2020

Попробуйте это выражение:

(?:.*)\s(\d+)[\w\s]+\s(\d+)\WFULL NAMES\W([\w\s]+)\WDATE OF BIRTH\W([\d.\s]+)

Здесь вы можете увидеть, как это работает: https://regexr.com/51f5v

Java пример:

String data = "JAMMURI YA KENYA ¢)a(s REPUBLIC OF KENYA\n" +
        "sennc wnecs: 23085129 aShl e 31662252\n" +
        "FULL NAMES\n" +
        "JUDITH AWINO OWITI\n" +
        "DATE OF BIRTH\n" +
        "25. 10. 1992\n" +
        "SEX\n" +
        "FEMALE\n" +
        "DISTRICT OF BIRTH\n" +
        "MUHORONI\n" +
        "PLACE OF ISSUE\n" +
        ". NYANDO\n" +
        "DATE OF ISSUE\n" +
        "' 16.04. 2013 A\n" +
        "j HOLDER'S SIGN oo - Ve";

Pattern pattern = Pattern.compile("(?:.*)\\s(\\d+)[\\w\\s]+\\s(\\d+)\\WFULL NAMES\\W([\\w\\s]+)\\WDATE OF BIRTH\\W([\\d.\\s]+)");
Matcher matcher = pattern.matcher(data);

if (matcher.find()) {
    System.out.println("IDNumber: " + matcher.group(1));
    System.out.println("SerialNumber: " + matcher.group(2));
    System.out.println("Name: " + matcher.group(3));
    System.out.println("DateOfBirth: " + matcher.group(4));
}

Вывод:

IDNumber: 23085129
SerialNumber: 31662252
Name: JUDITH AWINO OWITI
DateOfBirth: 25. 10. 1992
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...