1. 如何去除字符串中所有非字母的字符?
s = '@#24A-09=wes()&8973o**_##me' # contains letters 'Awesome'
- 生成器表达式:join
result = ''.join(c for c in s if c.isalpha())
- 使用过滤器过滤:
result = ''.join(filter(str.isalpha, s))
也可以用正则表达式 re.sub 来表示“非字母”
import re
result = re.sub(r'[^A-Za-z]', '', s)
- 还可以考虑使用字符串替换:str.replace()
2. 如何去除文本数据中的非字母数据
遍历所有文本中的字符串,再使用上述方法;
或者使用 Pandas 中的 apply函数。
- 若文本中的字符串(单词)以逗号隔开
text = ['@#24A-09=wes()&8973o**_##me', '@#24A-09=wes()&8973o**_##me', '@#24A-09=wes()&8973o**_##me']
result = [''.join(c for c in s if c.isalpha()) for s in text]
print(result)
['Awesome', 'Awesome', 'Awesome']
- 若文本包含了很多长字符串,字符串中的单词之间以空格分开
直接用上面方法的结果是,整个句子/文本变成一个长字符串
text = ['@#24A-09=wes()&8973o**_##me @#24A-09=wes()&8973o**_##me @#24A-09=wes()&8973o**_##me']
result = [''.join(c for c in s if c.isalpha()) for s in text]
print(result)
['AwesomeAwesomeAwesome']
结果并不是我们想要的!
一种解决方法:
先现对句子做分词处理
text = ['@#24A-09=wes()&8973o**_##me @#24A-09=wes()&8973o**_##me @#24A-09=wes()&8973o**_##me']
for s in text: # 这里若还使用列解析式会导致又多一层[]
text = s.split(" ")
# print(text)
result = [''.join(c for c in s if c.isalpha()) for s in text]
print(result)
['Awesome', 'Awesome', 'Awesome']
达到目的!
391



被折叠的 条评论
为什么被折叠?



