如何删除或过滤列表中的非英文(中文、韩文、日文、阿拉伯文)字符串?
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']
这是一个输入示例:
['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']