Регулярное выражение для перехода от одного отступа/вкладки к следующему отступу/вкладке в Python

#python #regex #text #docx

Вопрос:

Следующий код работает, в частности регулярное выражение, для перехода от одного отступа/вкладки к следующему экземпляру точки с запятой (;):

 def find_matches(text):
    return capitalize(
        [
            m
            for m in re.findall(
                r"^[^0-9]s ([^.;] s*) [.;] ", normalize("NFKD", text), re.MULTILINE
            )
        ]
    )
 

С помощью этого я могу создать следующее изображение с остальной частью моего кода:

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

Однако моя проблема связана с моим шаблоном регулярных выражений, поскольку на самом деле я должен перейти от первого отступа/вкладки к следующему экземпляру отступа/вкладки или, я полагаю, до следующей строки, в которой нет отступа. Вот исходная строка, которая взята из документа Word с использованием docx:

Вот ссылка на файл MediaUpload моего docx. Я решил связать его, так как не могу правильно отобразить фактическое форматирование здесь. Кроме того, второе текстовое поле должно быть немного длиннее для всей строки.

Мы будем очень признательны за любую помощь.

Комментарии:

1. Сработал ли ответ?

Ответ №1:

Вы могли бы использовать

 ^[^Srn]. (?:n(?!s).*)*
 

Шаблон совпадает:

  • ^ Начало строки
  • [^Srn] Сопоставьте символ пробела без новой строки (отступ)
  • . Сопоставьте 1 раз любой символ, кроме новой строки
  • (?: Группа без захвата для повторения в целом
    • n Сопоставьте новую строку
    • (?!s).* Отрицательный внешний вид, не утверждайте символ пробела и совпадайте с остальной частью строки
  • )* Закройте группу без захвата и при необходимости повторите

Демонстрация регулярных выражений | Демо-версия Python


Если совпадения должны быть частью, начинающейся с 1 или более цифр, за которыми следует a . , вы можете сначала получить эти совпадения, а затем обработать эти совпадения, используя первый шаблон.

 ^d ..*(?:n(?!d .).*)*
 

Демонстрация регулярных выражений