Python регулярное выражение: изменения для удаления чисел при определенных условиях - PullRequest
0 голосов
/ 25 января 2020

Стоит отметить, что механизм регулярных выражений прекращает активный поиск, как только находит совпадение. Затем порядок имеет значение в определенных ситуациях, потому что он не будет продолжать проверять оставшиеся опции в чередовании.

Цель этого регулярного выражения состоит из двух разделов:

  1. Удалить числа в начало строки, если эти числа находятся не сразу перед KINDER, SECONDARY, ELEMENTARY . Это просто, мы можем достичь этого с помощью следующего:
    (^\d*\b )(?!(ELEMENTARY|SECONDARY|KINDER)) 
    
  2. Сложить вместе цифры и буквы, которые составили порядковый номер (объяснено в здесь ). Например, строки, такие как 10 st, становятся 10st, но такие строки, как abcdefg238947 th, НЕ меняются. Соответствующее регулярное выражение следующее:
    (?<=[0-9])\s+(?=(?:ST|[RN]D|TH)(?: +[^\W\d_]|$))
    
    Проблема возникает при сложении этих двух вместе. Я понимаю, что если я установлю второе правило на первое место, то двигатель будет работать успешно и продолжит синтаксический анализ:
text= re.sub(r'(?<=[0-9])\s+(?=(?:ST|[RN]D|TH)(?: +[^\W\d_]|$))|(^\d*\b )(?!(ELEMENTARY|SECONDARY|KINDER))',
             '',
             '1 ST KINDER',
             0,
             re.IGNORECASE)

Имея следующую строку, двигатель должен установить вместе 1 и ST. Тогда наличие 1ST перед KINDER не должно совпадать со вторым правилом, но это не так:

1 ST KINDER  --> ST KINDER

Дополнительные примеры:

10306 KINDER  (OK)
12345 ABC     (OK)
1 ST KINDER   (SHOULD BE 1ST KINDER)
1 AB KINDER   (OK)

Как я могу установить вместе в ЖЕ Выражение regex с чередованием обоих правил, отдавая приоритет соединению цифр и букв, если они порядковые, а затем проверяет наличие цифр в начале?

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