Шаблон \w+
соответствует 1 или более любым символам слова, включая слова в ALLCAPS.
Обратите внимание, что I
, местоимение, также является ALLCAPS. Таким образом, предполагая, что вы хотите пропустить все слова ALLCAPS из 2 или более букв, вы можете рассмотреть возможность исправления текущего шаблона как
r'[^\w\s]+|\b(?![A-Z]{2,}\b)\w+|\n'
См. Демоверсию regex
Шаблон \b(?![A-Z]{2,}\b)\w+
соответствует
\b
- граница слова
(?![A-Z]{2,}\b)
- отрицательный прогноз, который не соответствует совпадению, если непосредственно справа от текущего местоположения имеются 2 или более прописных буквы ASCII, за которыми следует граница слова
\w+
- 1 или более символов слова (если вы хотите сопоставлять только буквы, замените на [^\W\d_]+
).
Чтобы поддерживать все заглавные буквы Unicode, вы можете использовать регулярное выражение PyPi с шаблоном r'[^\w\s]+|\b(?!\p{Lu}{2,}\b)\w+|\n'
или создать класс, используя pLu = '[{}]'.format("".join([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]))
(Python 3) или pLu = u'[{}]'.format(u"".join([unichr(i) for i in xrange(sys.maxunicode) if unichr(i).isupper()]))
(Python 2). См. регулярное выражение Python для заглавных слов в юникоде . Примечание. Я бы рекомендовал придерживаться последних версий Python или последних модулей регулярных выражений PyPi.