从 Python 中的 Unicode 文本中过滤掉多个表情符号
Filter out multiple emojis from Unicode text in Python
假设我们有以下包含表情符号的字符串:
sent1 = ' right'
sent2 = 'Some text?! '
sent3 = ''
任务是删除文本并得到以下输出:
sent1_emojis = ' '
sent2_emojis = ' '
sent3_emojis = ''
根据过去的问题 (Regex Emoji Unicode),我使用以下正则表达式来识别至少包含一个表情符号的字符串:
emoji_pattern = re.compile(u".*(["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"])+", flags= re.UNICODE)
为了获得输出字符串,我使用了以下内容:
re.match(emoji_pattern, sent1).group(0)
等等。
sent2
字符串有问题。 re.match(emoji_pattern, sent1).group(0)
returns 整个 sent2
而不是仅表情符号。
emoji_pattern
稍作改动即可:
emoji_pattern = re.compile(u"([" # .* removed
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"])", flags= re.UNICODE) # + removed
for sent in [sent1, sent2, sent3]:
print(''.join(re.findall(emoji_pattern, sent)))
如果你需要移动文本,你可以不用担心表情符号,只需使用匹配任何字符的模式,比如 \w
,它将匹配任何单词字符(相当于 [a-zA-Z0-9_]
).如果您需要匹配更多,例如。空格,使用 [\w\s]
。如果您需要点、逗号等,请使用 [\w\s\.,-]
。然后用空字符串替换任何匹配项。
这样您将删除表情符号以外的所有内容。
编辑:我在 Python 正则表达式引擎中得到了有趣的结果:Demo
我使用了 [\u0000-\uFFFF]
,它应该匹配任何字符。令人惊讶的是,它不匹配表情符号,而 .
(点,表示任何字符)确实匹配表情符号。
假设我们有以下包含表情符号的字符串:
sent1 = ' right'
sent2 = 'Some text?! '
sent3 = ''
任务是删除文本并得到以下输出:
sent1_emojis = ' '
sent2_emojis = ' '
sent3_emojis = ''
根据过去的问题 (Regex Emoji Unicode),我使用以下正则表达式来识别至少包含一个表情符号的字符串:
emoji_pattern = re.compile(u".*(["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"])+", flags= re.UNICODE)
为了获得输出字符串,我使用了以下内容:
re.match(emoji_pattern, sent1).group(0)
等等。
sent2
字符串有问题。 re.match(emoji_pattern, sent1).group(0)
returns 整个 sent2
而不是仅表情符号。
emoji_pattern
稍作改动即可:
emoji_pattern = re.compile(u"([" # .* removed
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"])", flags= re.UNICODE) # + removed
for sent in [sent1, sent2, sent3]:
print(''.join(re.findall(emoji_pattern, sent)))
如果你需要移动文本,你可以不用担心表情符号,只需使用匹配任何字符的模式,比如 \w
,它将匹配任何单词字符(相当于 [a-zA-Z0-9_]
).如果您需要匹配更多,例如。空格,使用 [\w\s]
。如果您需要点、逗号等,请使用 [\w\s\.,-]
。然后用空字符串替换任何匹配项。
这样您将删除表情符号以外的所有内容。
编辑:我在 Python 正则表达式引擎中得到了有趣的结果:Demo
我使用了 [\u0000-\uFFFF]
,它应该匹配任何字符。令人惊讶的是,它不匹配表情符号,而 .
(点,表示任何字符)确实匹配表情符号。