В этом конкретном случае вы можете просто указать обычный алфавитный диапазон в поиске:
a = "should print nŌt thìs"
re.findall(r"(\b[A-Za-z]+\b)", a)
# ['should', 'print']
Конечно, вы можете добавить цифры или что-нибудь еще, что вы хотите сопоставить.
Что касается отрицательного просмотра вперед, они используют синтаксис (?!...)
с ?
перед !
, и они должны быть в круглых скобках. Чтобы использовать его здесь, вы можете использовать:
r"\b(?!\w*[À-ǚ])\w*"
Это:
- Проверяет границу слова
\b
, например пробел или начало входной строки. - Выполняет отрицательный просмотр вперед и останавливает сопоставление, если обнаруживает какой-либо специальный символ, которому предшествует 0 или более символов слова. Вы должны включить
\w*
, потому что (?![À-ǚ])
будет проверять только специальный символ, являющийся первой буквой в слове. - Наконец, если он проходит мимо просмотра вперед, он соответствует любым символам слова.
Демо . Обратите внимание, что на regex101.com вы должны указать Python аромат для \b
, чтобы правильно работать со специальными символами.
Также есть третий вариант:
r"\b[^À-ǚ\s]*\b"
Средняя часть [^À-ǚ\s]*
означает соответствие любому символу , кроме специальных символов или пробелов, неограниченное количество раз.