【问题标题】:Filter Non English Keywords from Python List从 Python 列表中过滤非英语关键字
【发布时间】:2018-10-11 03:16:37
【问题描述】:

我有以下 python 列表,

List= ['Images', 'Maps', 'Play', 'YouTube', 'News', 'Gmail', 'Drive', None, 
'Web History', 'Settings', 'Sign in', 'Advanced search', 'Language tools', 
'हिन्दी', 'বাংলা', 'తెలుగు', 'मराठी', 'தமிழ்', 'ગુજરાતી', 'ಕನ್ನಡ', 'മലയാളം', 
'ਪੰਜਾਬੀ', 'Advertising\xa0Programs', 'Business Solutions', '+Google', 
'About Google', 'Google.co.in', 'Privacy', 'Terms']

我想从这个列表中过滤掉非英语关键字,并希望我的最终列表看起来像这样,

List=['हिन्दी', 'বাংলা', 'తెలుగు', 'मराठी', 'தமிழ்', 'ગુજરાતી', 'ಕನ್ನಡ', 'മലയാളം','ਪੰਜਾਬੀ']

这可以用正则表达式完成吗?我使用 Python 3.x 感谢您的帮助!

【问题讨论】:

标签: python regex list filter


【解决方案1】:

由于非英文字符都在 7 位 ASCII 范围以上,您可以测试每个单词中任何字符的序数是否在 127 以上并被str.isalpha() 视为字母表:

[w for w in List if w and any(ord(c) > 127 and c.isalpha() for c in w)]

使用您的示例输入,这将返回:

['हिन्दी', 'বাংলা', 'తెలుగు', 'मराठी', 'தமிழ்', 'ગુજરાતી', 'ಕನ್ನಡ', 'മലയാളം', 'ਪੰਜਾਬੀ']

【讨论】:

  • 不错!这里的横向思维真的很棒。
  • 一些非英语单词如果足够欧洲,可能会漏掉,例如。瑞典语“Öppen”(打开)。
  • @figbeam 确实。然后修复。
  • 谁能分解这个列表理解?
  • @MasooriMenon 此列表解析执行以下操作:对于List 中的每个单词w,测试w 是否为真(因此不是空字符串),以及是否有任何字符w这个词中的c的序数大于127(因为英文字符都在128以下),被认为是字母(不包括标点符号和符号)。只有满足以上所有条件,列表理解才会将w 输出到列表中。
【解决方案2】:

在正则表达式中也是可行的。

import re

result = ["".join(re.findall("[^\u0000-\u05C0]",i)) for i in List if i is not None and re.findall("[^\u0000-\u05C0]",i)]

print (result)

结果:

['हिन्दी', 'বাংলা', 'తెలుగు', 'मराठी', 'தமிழ்', 'ગુજરાતી', 'ಕನ್ನಡ', 'മലയാളം', 'ਪੰਜਾਬੀ']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2022-12-02
    • 2020-11-23
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多