1

希伯来语在 1424 和 1514(或十六进制 0590 到 05EA)之间具有 unicode 表示。

我正在寻找正确、最有效和最 Pythonic 的方式来实现这一目标。

首先我想出了这个:

for c in s:
    if ord(c) >= 1424 and ord(c) <= 1514:
        return True
return False

然后我带来了一个更优雅的实现:

return any(map(lambda c: (ord(c) >= 1424 and ord(c) <= 1514), s))

有可能:

return any([(ord(c) >= 1424 and ord(c) <= 1514) for c in s])

其中哪一个是最好的?或者我应该做不同的事情?

4

3 回答 3

16

你可以这样做:

# Python 3.
return any("\u0590" <= c <= "\u05EA" for c in s)
# Python 2.
return any(u"\u0590" <= c <= u"\u05EA" for c in s)
于 2012-05-19T10:19:10.763 回答
1

您的基本选择是:

  1. 匹配包含字符范围的正则表达式;或者
  2. 遍历字符串,测试包含所有目标字符的字符串或集合中字符的成员资格,如果找到匹配项则中断。

只有实际测试才能显示哪个会更快。

于 2012-05-19T10:19:56.940 回答
1

使用 unidcodedata 检查第一个字符很简单:

import unicodedata

def is_greek(term):
    return 'GREEK' in unicodedata.name(term.strip()[0])


def is_hebrew(term):
    return 'HEBREW' in unicodedata.name(term.strip()[0])
于 2015-11-03T17:39:50.197 回答