我想用Python清理文本数据(即只保留字母数字字符)。然而,我遇到的大多数文本数据都包含表情符号。我想清除非字母数字的文本,但仍保留表情符号
首先,我使用Python中的emoji
库将文本中的每个表情符号转换为特定的字符串模式,以使其易于区分。下面显示了一个已被“demojized”(库中的文字函数)的表情符号示例:
':smiley_face:' # a "demojized" emoji.
在滚动浏览数据之后,我发现这些表情(曾经“去市场化”)呈现出相同的模式,用正则表达式的术语来说似乎是
':[a-z_]+:' # regex for matching emojis.
好的,我知道表情符号的模式,我可以从我的文本数据中提取每个表情符号。问题是,我想清除非字母数字的文本数据,而不同时改变表情符号模式。我首次尝试清理数据:
>>> text = 'Wow.. :smiley_face: this is delicious!' # A string containing emoji
>>> cleaned_text = re.sub('[^a-zA-Z0-9]+',' ',text) # regex to keep only alphanumerics
>>> print(cleaned_text)
Wow smiley face this is delicious
显然这不是我想要的输出。我想保持表情文字的完整性,如下所示:
'Wow :smiley_face: this is delicious' # Desired output
到目前为止,我已经研究过前瞻性断言之类的东西,但没有结果。正则表达式是否可以删除非字母数字,同时从匹配中排除':[a-z_]+:'
模式?如果问题不清楚,道歉
如果只想删除
colon-word(s)-colon
上下文中除冒号和下划线以外的所有特殊字符,可以使用见regex demo详细信息:
(:[a-z_]+:)
-捕获组1(\1
)::
,一个或多个小写ASCII字母或_
,以及:
|
-或[^\w\s]|_
-除单词和空格字符或_
以外的任何字符(它是单词字符,因此需要作为替代添加)李>见the Python demo:
相关问题 更多 >
编程相关推荐