我有一个字符串“one two 9three 52eight four”,所以我只想得到“一二四”,因为“3”以“9”开头,“8”以“52”开头。
我试过了:
"(?!\d)\w+"
但它仍然是“三”和“八”。我不想要它。
答案 0 :(得分:4)
尝试
\b[a-zA-Z]\w*
答案 1 :(得分:2)
那是因为\w
包含了数字。你需要做的是:
>>> s = "one two 9three 52eight four"
>>> import re
>>> re.findall(r'\b[a-z]+\b', s, re.I)
['one', 'two', 'four']
此外,您正在使用(?!...)
的内容称为负面预测,而您可能意味着负面的后瞻(?<!...)
,由于上述问题,这当然仍会失败。< / p>
eta :那么你只需要一个单词边框:
>>> re.findall(r'\b(?!\d)\w+', s)
['one', 'two', 'four']
答案 2 :(得分:1)
对我来说很好:
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']
答案 3 :(得分:0)
regexp可能有点矫枉过正。
In [3]: [word for word in eg.split(' ') if not word[0].isdigit()]
Out[3]: ['one', 'two', 'four']