Извлечение данных из строки с помощью регулярного выражения - PullRequest
0 голосов
/ 25 декабря 2018

Я собираюсь извлечь ценность для бизнеса из строки.Но моя проблема в том, что строка повторяется каждый раз в цикле.И синтаксис контента всегда один и тот же, но контент меняется.Таким образом, мне нужен reg-expr, который помогает мне извлечь данные.

То, что я пробовал до сих пор: ("^\\d{1,2}(.{1})\\s([A-Za-z]{2})\\s(([A-Z]\\d{2,3}))\\s.")

Но приведенный выше шаблон выводит мне только первые три аргумента: 01.Di F929

Пример строки выглядит следующим образом:

01. Di F929 * Fr F929 Fr FREI Mo S688 Mi S49 * Sa S57 Mo F929 
Do F224 So S49 Di X337 Fr F56 So FREI \n

Позвольте мне объяснить, как строится строка.

  1. (01.) - это цифра от 01 до 31.
  2. Ниже приведены короткие недели (немецкий) (Мо, Ди, Ми, ..)
  3. Словоначинается с символа и заканчивается цифрой (F929, S49, ...)
  4. (необязательно), специальным символом, например '*, X, ...'

Внимание:

Di + F929 + *
представляет отдельный блок данных.Каждая строка содержит около 12 блоков данных.

Мне нужно регулярное выражение, соответствующее указанной выше проблеме.Спасибо в связи!

1 Ответ

0 голосов
/ 25 декабря 2018

Это поможет вам:

(\d{1,2}\.)?\s*([A-Za-z]{2}\s+[A-Z0-9]+\s*[*X]?)\s*

Демо онлайн

Код Java:

public class Test {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(\\d{1,2}\\.)?\\s*([A-Za-z]{2}\\s+[A-Z0-9]+\\s*[*X]?)\\s*");
        String string = "01. Di F929 * Fr F929 Fr FREI Mo S688 Mi S49 * Sa S57 Mo F929 " +
            "Do F224 So S49 Di X337 Fr F56 So FREI \\n";

        Matcher m = pattern.matcher(string);

        while (m.find())
            System.out.println(m.group(2));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...