Регулярное выражение для соответствия шаблону строки в нескольких строках - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь извлечь текст из PDF.Но извлеченный текст не в порядке.Поэтому я пишу регулярное выражение, чтобы извлечь и использовать его.Поскольку я новичок в написании регулярных выражений и в работе с многоканальными текстами, я сталкиваюсь с проблемами.Может ли кто-нибудь помочь.Текст строки выглядит следующим образом: stringtext = 0,10 - 0,20 0,30 - 0,40, 0,50 - 0,60 (строка 1) A (строка 2) / (строка 3) B (строка 4)/ (Строка 5) C (Строка 6) / (Строка 7) D (Строка 8) / (Строка 9)

Моя цель - извлечь только ABCD из строкового текста.Может ли кто-нибудь помочь.Спасибо!

Я пытался исследовать, но не могу найти решение, которое мне подходит.

    stringtext = 0,10 - 0,20 0,30 - 0,40, 0,50 - 0,60
                 A
                 /
                 B
                 /
                 C
                 /
                 D
                 /;
   Pattern pattern = pattern.compile(".*\\r\\n(\\_.*)$");
   Matcher matcher = pattern.matcher(stringtext);
   if(matcher.find()){
    System.out.println(matcher.group(1);
   }

Ожидаемый вывод должен быть ABCD

1 Ответ

0 голосов
/ 18 июня 2019

Если вы хотите использовать .* для сопоставления с первой строкой, вы можете сделать сопоставление более конкретным, начав его, например, с шаблона первого числа.

Вы можете использоватьякорь \G для получения повторяющихся совпадений и сопоставления прописных символов в группе захвата.

(?:^\d+,\d+.*|\G(?!^))\R\h+([A-Z])\R.*\/

Пояснение

  • (?: Группа без захвата
    • ^\d+,\d+.* Совпадение с начала строки 1+ цифр, запятая и 1+ цифр
    • | Или
    • \G(?!^) Утверждение позиции в концепредыдущее совпадение, а не в начале
  • ) Закрыть группу без захвата
  • \R\h+ Соответствовать последовательности новой строки в Unicode и 1+ горизонтальных пробельных символов
  • ([A-Z]) Захватить заглавные буквы в группе 1
  • \R.*\/ Соответствовать последовательности новой строки в Юникоде, любому символу, кроме символа новой строки 0+ и косой черты.

Regex demo | Java демо

Например:

String regex = "(?:^\\d+,\\d+.*|\\G(?!^))\\R\\h+([A-Z])\\R.*\\/";
String stringtext = "0,10 - 0,20 0,30 - 0,40, 0,50 - 0,60\n"
     + "                     A\n"
     + "                     /\n"
     + "                     B\n"
     + "                     /\n"
     + "                     C\n"
     + "                     /\n"
     + "                     D\n"
     + "                     /;";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(stringtext);

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

Результат

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