为python3正则表达式创建模块化函数

时间:2017-09-20 19:27:59

标签: python regex python-3.x

我是正则表达式的新手,我正在尝试创建一个模块化函数,用于在python中读取文件(在命令行上)并使用正则表达式从字符串列表中删除数字和特殊字符并返回为小写字符串。 如果我有办法让我的代码更简单,我将不胜感激。我的目标是执行提取一些基本文本并执行分析。在这种情况下,我尝试分析文本正文中的单词。 谢谢你的帮助。

获取字符串列表并将其作为

返回

删除了数字和特殊字符的小写字符串

def normalize(text):
    return_string = ' '.join(text)
    return_string = re.sub(r'[0-9]+', '', return_string)
    return_string = re.sub(r'[,]+', '', return_string)
    return_string = re.sub(r'[.]+', '', return_string)
    return_string = re.sub(r'[;]+', '', return_string)
    return_string = re.sub(r'[?]+', '', return_string)
    return_string = re.sub(r'[*]+', '', return_string)
    return_string = re.sub(r'[-]+', ' ', return_string)
    return_string = re.sub(r'[_]+', '', return_string)
    return_string = re.sub(r'[\"]+', '', return_string)

    return return_string.lower()
if __name__ == '__main__':
    words = read_in_file('sample.txt')
    words = normalize(words)
print(words)

2 个答案:

答案 0 :(得分:2)

这不那么冗长。如果您只想接受a-z值,则在[]中使用^指定正则表达式更容易。

def normalize(text):
    return re.sub('[^a-z]', '', ' '.join(text).lower())

答案 1 :(得分:1)

确定要保留的字符可能更容易,而不是您不想要的字符。不是正则表达式,但如果您只想要降低字母字符的版本,则非常简单。

def clean_chars(raw_input):
    return ''.join([char.lower() for char in raw_input if char.isalpha()])

if __name__ == "__main__":
    raw_data = "This is a testing string abc 1234 &#1)$21"
    print(clean_chars(raw_data))