потому что \w
включает число. что вам нужно сделать, это:
>>> s = "one two 9three 52eight four"
>>> import re
>>> re.findall(r'\b[a-z]+\b', s, re.I)
['one', 'two', 'four']
Кроме того, то, что вы используете (?!...)
, называется отрицательным прогнозом, в то время как вы, вероятно, подразумевали негативный прогноз (?<!...)
, который, конечно же, все равно потерпит неудачу из-за вышеуказанной проблемы.
eta : тогда вам просто нужно одно слово границы:
>>> re.findall(r'\b(?!\d)\w+', s)
['one', 'two', 'four']