def de_punctuate(xs):
return re.findall(r"[\w']+(?:-[\w']+)*", xs)
numbers = partial(re.search, r'[0,9]')
def no_numbers(xs):
return filterfalse(numbers, xs)
def string2filter(xs):
return no_numbers(de_punctuate(xs))
for d in data:
print(d)
print(list(string2filter(d)))
输出:
Nordmann brukte mobilen i ett døgn i Afrika - må ut med 137.000 kroner
['Nordmann', 'brukte', 'mobilen', 'i', 'ett', 'døgn', 'i', 'Afrika', 'må', 'ut', 'med', '137', 'kroner']
400.000 japanere evakueres fra flom
['japanere', 'evakueres', 'fra', 'flom']
Utvist i 2009 - nå siktet for overfallsvoldtekt i 2011
['Utvist', 'i', 'nå', 'siktet', 'for', 'overfallsvoldtekt', 'i']
Selvmordsangrep mot afghansk bryllupsfest - Minst 22 drepte
['Selvmordsangrep', 'mot', 'afghansk', 'bryllupsfest', 'Minst', '22', 'drepte']
我很困惑为什么输出与数字不一致。应该没有。在某些情况下,这是正确的,但对于其他情况,他们仍然存在。 见输出1和4.
任何想法?
如果出现以下错误,我想测试每个word
:this3
我可以在第一个重复表达式中包含数值搜索,所以我不必进行双重传递吗?
答案是:
def stripsplit(xs):
""" return a list, excluding numbers and punctuation (except joining hyphens) """
return re.findall(r"[a-zA-ZåøæÅØÆ']+(?:-[a-zA-ZåøæÅØÆ']+)*", xs)
答案 0 :(得分:3)
要搜索数字,而不是r'[0,9]'
,您应该使用'[0-9]'
或'\d'
。
([0,9]
匹配'0'或','或'9',这不是你的意思)
修改: \w
相当于[a-zA-Z0-9_]
。为什么不直接使用[a-zA-Z']
?