如何从多语言字符串列表中保留含符号表情的英文串并移除非英文串
筛选含表情/特殊符号的英文字符串
需求说明
给定一个混合多语言的字符串列表,需要移除其中的非英文字符串,但保留以英文为主、同时包含表情符号或特殊符号(如™)的字符串。
示例输入
foreign_strings = ['Instagram', '爱奇艺PPS -《欢乐颂2》电视剧热播', 'Docs To Go™ Free Office Suite', 'Instachat 😜']
期望输出
english_strings = ['Instagram', 'Docs To Go™ Free Office Suite', 'Instachat 😜']
原代码问题
你使用isascii()方法筛选时,会把包含表情、™的字符串排除——因为这些字符不属于ASCII编码范围,最终只得到['Instagram'],无法满足需求。
解决方案
借助正则表达式实现精准筛选,核心逻辑是:排除包含中文、日文、韩文等非英文语言字符的字符串,保留含英文、允许的符号及表情的字符串。
代码实现
import re def is_valid_english_string(s): # 匹配中文、日文平假名、日文片假名、韩文等非英文语言字符,存在则排除 non_english_chars = r'[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af]' if re.search(non_english_chars, s): return False # 确保字符串至少包含英文字母,避免纯表情/符号的无效内容(可选,按需调整) return bool(re.search(r'[a-zA-Z]', s)) foreign_strings = ['Instagram', '爱奇艺PPS -《欢乐颂2》电视剧热播', 'Docs To Go™ Free Office Suite', 'Instachat 😜'] english_strings = [string for string in foreign_strings if is_valid_english_string(string)] print(english_strings)
代码说明
- 正则表达式
[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af]覆盖了常见的非英文语言字符,只要字符串包含这类字符就直接排除。 - 额外检查英文字母的存在,避免筛选出纯表情、纯符号这类无意义的字符串(不需要该限制可直接删除此判断)。
- 列表推导式实现快速筛选,代码简洁高效。
内容的提问来源于stack exchange,提问作者kmedri
相关产品推荐
相关产品推荐

