Выражение регулярного выражения для разделения свернутого заголовка - PullRequest
0 голосов
/ 01 февраля 2019

Первый пост.У меня есть текст, где много текста в случае заголовка свернут без пробелов.Я пытаюсь: а) сохранить полный текст (не теряя слов), б) использовать логику для разделения «A», как в «A Way Forward», в) избегать разделения акронимов, таких как EPA, DOJ, ect (которыйуже в полной кепке).

Мой код регулярного выражения довольно близок, но в начале или конце слов он оставляет «A»:

f = "TheCuriousIncidentOfAManInAWhiteHouseAt1600PennsylvaniaAveAndTheEPA" re.sub (r ")([AZ] [az] | [AZ] [AZ] | \ d +) ", r" \ 1 ", f) .split ()

вывод:

[«The», «Curious», «Incident», «Of», «AMan», «In», «AWhite», «House», «At», «1600», «Pennsylvania», «Ave», «And»',' The ',' EPA ']

Проблема выводится как «AMan», «AWhite» и т. Д.

Должно быть:

['The', 'Curious', 'Incident', 'Of', 'A', Man ', ' In ', ' A ', White', «Дом», «В», «1600», «Пенсильвания», «Ave», «И», «The», «EPA»]

Спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

Добро пожаловать в стек переполнения Грег.Хорошее начало для вашего регулярного выражения.

Я бы попробовал что-то вроде этого:

([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)

Сломано, для объяснения:

([A-Z]{2,}(?![a-z])  // 2 or more capital letters, not followed by a lowercase letter
|                    // OR
[a-zA-Z][a-z]*       // Any letter, followed by any number of lowercase letters
|                    // OR
[0-9]+)              // One or more digits

Лучше всего использовать так:

re.findall(r'([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)', s)

Попробуйте онлайн (содержит \W* для форматирования)

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