首页 > 解决方案 > Python从具有特殊情况的列表中删除非字母字符/单词

问题描述

嗨,伙计们,我只是想知道如果列表中的单词不包含任何字母字符,我该如何将其删除,但如果它包含任何字母字符后跟任何类型的特殊字符或数字,则不会被删除

说我有一个句子/单词列表,如下所示:

['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']

所需的输出将是:

['python','abc123','','','12345abc#','hello@','','123abc']

我尝试过的是以下内容:

data = ['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']
regex = re.compile('[^a-zA-Z0-9&._-]')
filtered= [regex.sub('', each_data) for each_data in data ]

结果是:

['python', 'abc123', '12345abc', 'hello', '141351351', '123abc']

它删除了所有错误的特殊字符我不知道如何解决这个问题,我仍在考虑如何使用正则表达式解决它,我也尝试过使用 nltk 并且似乎也找不到答案。任何形式的提示或帮助将不胜感激

标签: pythonregex

解决方案


我不确定我是否理解您的问题,但您提供的示例输入输出可以处理为:

[item if re.search('(?i)[a-z]', item) else '' for item in your_list]

你的例子:

your_list = ['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']

import re
[item if re.search('(?i)[a-z]', item) else '' for item in your_list]

# output:
# ['python', 'abc123', '', '', '12345abc#', 'hello@', '', '123abc']

推荐阅读