正则表达式,用于删除除A-z之外的所有字符并删除所有包含数字的单词

时间:2018-08-14 12:25:54

标签: python regex replace

我的目标是编写一个函数,该函数输入文本并用空格替换拉丁字母(A-z)以外的所有字符,并删除所有包含数字的单词。然后用单个空格替换所有多个空格。

示例:

' hello, world! ho1hoho2ho, merry xmas!! ho1ho1 :))' -> 'hello world merry xmas'. 

实现此功能的Python函数:

def clean_text(text):
    text_valid = re.sub(u'[^A-z0-9]', ' ', text)
    return ' '.join(word for word in text_valid.split()
                    if not re.search(r'\d', word))

现在,我想知道是否有单个正则表达式,所以我可以写类似

return ' '.join(re.findall(enter_my_magical_regex_here))

或者,也许还有另一种方法可以用更快(并且希望更短)替换上面的代码?

2 个答案:

答案 0 :(得分:2)

您可以使用

' '.join(re.sub('([^A-Za-z0-9 ]|[^ ]*[0-9][^ ]*)', '', text).split())

答案 1 :(得分:1)

这将为您提供所需的输出-

x = ' hello, world! ho1hoho2ho, merry xmas!! ho1ho1 :))'
re.sub('[!,]', '', ' '.join([i for i in x.split() if not re.findall('[\d+:\\?\"<>*/|]', i)]))

但是您可能不得不在这里和那里进行调整