如何删除或过滤列表中的非英文(中文、韩文、日文、阿拉伯文)字符串?

How to remove or filter non-english (chinese, korean, japanese, arabic) strings in list?

这是一个输入示例:

['ARTA Travel Group', 'Arta | آرتا', 'ARTAS™ Practice Development',    'ArtBinder', 'Arte Arac Takip App', 'アート建築', 'Arte Brasil Bar &    Grill', 'ArtPod Stage', 'Artpollo扫码', 'Artpollo阿波罗-价值最优的艺术品投资电商',    '아트홀']

像上面的列表一样,我想删除包含中文、韩文、日文、阿拉伯语的元素。

下面是预期的输出(仅英文):

['ARTA Travel Group', 'ARTAS™ Practice Development', 'ArtBinder', 'Arte Arac Takip App', 'Arte Brasil Bar & Grill', 'ArtPod Stage']

抱歉,由于声誉锁定,我无法对此 post 发表评论。

这里回答了这个问题Detect strings with non English characters in Python

希望对您有所帮助!

使用正则表达式。将需要的字符放入正则表达式

c = ["ab cde", "test", "张三"]
b = filter(lambda x: re.search("[a-zA-Z\s]+",x) is not None, c)

给你个主意

您可以使用 regex 并使用 unicode 范围进行搜索。 ™ 属于 Letterlike Symbols,范围从 2100—214F;您可以全部包含它们,也可以只选择特定的。

import re

s = ['ARTA Travel Group', 'Arta | آرتا', 'ARTAS™ Practice Development', 'ArtBinder', 'Arte Arac Takip App', 'アート建築', 'Arte Brasil Bar & Grill', 'ArtPod Stage', 'Artpollo扫码', 'Artpollo阿波罗-价值最优的艺术品投资电商', '아트홀']

result = [i for i in s if not re.findall("[^\u0000-\u05C0\u2100-\u214F]+",i)]

print (result)

['ARTA Travel Group', 'ARTAS™ Practice Development', 'ArtBinder', 'Arte Arac Takip App', 'Arte Brasil Bar & Grill', 'ArtPod Stage']

您可以使用 python 3.7 中引入的函数 isascii 删除列表中的 non-english 字符串。所以使用这个功能的最低要求是你必须有 python 版本 >= python 3.7.

 def isEnglish(s):

  return s.isascii()

print(isEnglish("Test"))

print(isEnglish("['ARTA Travel Group', 'Arta | آرتا', 'ARTAS™ Practice Development',    'ArtBinder', 'Arte Arac Takip App', 'アート建築', 'Arte Brasil Bar &    Grill', 'ArtPod Stage', 'Artpollo扫码', 'Artpollo阿波罗-价值最优的艺术品投资电商',    '아트홀']"))

输出:

  ['ARTA Travel Group', 'ARTAS™ Practice Development', 'ArtBinder', 'Arte Arac Takip App', 'Arte Brasil Bar & Grill', 'ArtPod Stage']