Извлечение части строки с использованием регулярных выражений с повторением конечных слов - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь извлечь некоторые необработанные строки, используя модуль re в python. Конец секции, подлежащей извлечению, идентифицируется повторяющимся словом (повторяется несколько раз). Текущие усилия всегда фиксируют последнее совпадение повторяющегося слова. Как я могу изменить это поведение?

Текстовый файл был извлечен из PDF-файла. Весь PDF хранится в виде одной строки. Общее форматирование строки приведено ниже:

* "*** Начало примечаний: коллекция буквенно-цифровых слов и символов EndofsectionTopic A: строка слов Endofsection" *

Предполагаемая строка для захвата: "Коллекция буквенно-цифровых слов и символов"

Попытка решения, использованная в этой ситуации, была: " re.compile (r "* {3} Начало заметок: (. +) \ sEndofsection")

Эта попытка стремится соответствовать целой строке, а не просто «коллекции буквенно-цифровых слов и символов», как предполагалось.

Один из возможных подходов - разделить с помощью Endofsection, а затем извлечь строку только из первого раздела - это работает, но я надеялся найти более элегантное решение с использованием re.compile.

1 Ответ

0 голосов
/ 13 апреля 2019

Две проблемы в вашем регулярном выражении,

  • Вам нужно экранировать *, поскольку это метасимвол как \*
  • Во-вторых, вы используете (.+), которыйявляется жадным квантификатором и будет пытаться найти максимально возможное совпадение, но, поскольку вы хотите самое короткое совпадение, вам просто нужно изменить его на (.+?)

Исправление этих двух проблем дает правильное назначениеmatch.

Regex Demo

Код Python,

import re

s = "***Start of notes: Collection of alphanumeric words and characters EndofsectionTopic A: string of words Endofsection"
m = re.search(r'\*{3}Start of notes:(.+?)\sEndofsection', s)
if m:
 print(m.group(1))

Печать,

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