Слова не начинаются с цифр - PullRequest
3 голосов
/ 28 апреля 2010

У меня есть строка «один два 9three 52eight four», поэтому я хочу получить только «один два четыре», поскольку «три» начинается с «9», а «восемь» начинается с «52».

Я пытался:

"(?!\d)\w+"

но он все еще принимает "три" и "восемь". Я не хочу этого.

Ответы [ 4 ]

4 голосов
/ 28 апреля 2010

Попробуйте

\b[a-zA-Z]\w*
2 голосов
/ 28 апреля 2010

потому что \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']
1 голос
/ 28 апреля 2010

отлично работает у меня:

import re

l = "one two 9three 52eight four".split()
c = re.compile("(?!\d)\w+")

m = [w for w in l if re.match(c, w)]
print m

Печать:

['one', 'two', 'four']
0 голосов
/ 28 апреля 2010

регулярное выражение может быть излишним.

In [3]: [word for word in eg.split(' ') if not word[0].isdigit()]
Out[3]: ['one', 'two', 'four']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...