本文主要是介绍用python将字符串中的表情(微信表情 [ ])和普通文本拆分开来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有一堆包含表情(微信表情)的文本,要计算情绪量。
表情和普通文本需要分开命中情绪词典。
这里解决的是将字符串中的表情和普通文本拆分开来的问题。
有两种方法:
- 用正则表达式查找和移除表情
- 用表情分隔符 ‘[’ 和 ‘]’ 将文本拆开,然后合并
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 19 16:37:54 2020@author: weisssun
"""#有一段包含表情的字符串,要将表情和文本拆分#————————————————————————————————————————————
#第一个思路是用正则表达式直接查找#正则表达式查找方法:
#import re
#pattern = re.compile('正则表达式')
#text = '一段字符串'
#result = pattern.findall(text)#表情的正则表达式:
#emojis = re.compile(r'\[.\]|\[..\]|\[...\]|\[....\]')
#参考链接:https://zhuanlan.zhihu.com/p/110912040import recontent = 'BGM好好听[皱眉][皱眉][皱眉][皱眉]又骗我买香水[傲慢]我期待邂逅[傲慢][笑中带泪]'
#content是需要拆分的字符串emoji_pattern = re.compile(r'\[.\]|\[..\]|\[...\]|\[....\]')
#定义表情的正则表达式方法emojis = emoji_pattern.findall(content)
#从字符串中查找所有符合表情格式的内容
print(emojis)
#输出的是字符串列表
#['[皱眉]', '[皱眉]', '[皱眉]', '[皱眉]', '[傲慢]', '[傲慢]', '[笑中带泪]']text = emoji_pattern.sub('', content)
#将表情移除,剩下的是文本
print(text)
#输出的是字符串#——————————————————————————————————————————————
#第二个是使用 '[' 和 ']' 拆分文本的思路
#学习其他人的代码,有两个地方不明白import copycontent = '啊[皱眉][皱眉][皱眉][皱眉]又骗我买香水[傲慢]我期待邂逅[傲慢][笑中带泪]'
emojilist = []first_emoji_pos = content.find('[')
#找到字符串中第一个 emoji表情 的位置pieces = content.split('[')
#将字符串用 '[' 分割开来,分成多个碎片
#输出的是字符串列表,列表中的每个元素是一个碎片
#表情现在在单个碎片的最前方,如: 傲慢]我期待邂逅红色的毛爷爷
#一个碎片里只会有一个表情text = pieces[0]
#pieces[0] 是第一个表情的 '[' 之前的文本
#如果前面没有文本,pieces[0] 就是空字符串for piece in pieces:
#挨个处理每个碎片emoji_pos_r = piece.find(']')#找到碎片中 ']' 的位置#碎片中的 ']' 是表情和文本分分界线#print(emoji_pos_r),为啥第一个是-1呢?不理解if emoji_pos_r >= 0:text = text + piece[(emoji_pos_r + 1):]#piece[(emoji_pos_r + 1):] 是单个碎片中 ']' 之后的文本#将第一个 '[' 之前的文本,和每个碎片 ']' 之后的文本合并起来#最终得到字符串中所有的文本emoji = '[' + piece[:emoji_pos_r] + ']'#piece[:emoji_pos_r] 是单个碎片中 ']' 之前的内容,也就是表情#给表情前后加上 '[' 和 ']', 得到单个碎片中表情的完整版emojilist.append(copy.deepcopy(emoji))#将每个碎片里的表情拷贝后添加到列表中#这里为什么要用deepcopy呢?可能是为了避免某种错误?
print(text)
#字符串中的文本
print(emojilist)
#字符串中的表情
这篇关于用python将字符串中的表情(微信表情 [ ])和普通文本拆分开来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!