我在 Python 中有一个 Unicode 字符串。我正在寻找一种方法来确定字符串中是否有任何中文/日文字符。如果可能的话,最好能够找到这些字符。
这似乎与语言检测问题有点不同。我的字符串可以是英文和中文文本的混合。
我的代码可以访问 Internet。
我在 Python 中有一个 Unicode 字符串。我正在寻找一种方法来确定字符串中是否有任何中文/日文字符。如果可能的话,最好能够找到这些字符。
这似乎与语言检测问题有点不同。我的字符串可以是英文和中文文本的混合。
我的代码可以访问 Internet。
您可以使用 Unicode Script 属性来确定它们通常与什么脚本相关联。
遗憾的是, Python 的unicodedata
模块没有这个属性。但是,一些第三方模块,例如,unicodedata2
并unicodescript
确实具有此信息。您可以查询它们并检查脚本中是否有任何字符Han
,对应于中文(以及汉字和汉字)。
我尝试unicodedata
了 nneonneo 在他的回答中提到的 Python 模块,我认为它可能有效。
>>> import unicodedata
>>> unicodedata.name('你')
'CJK UNIFIED IDEOGRAPH-4F60'
>>> unicodedata.name('桜')
'CJK UNIFIED IDEOGRAPH-685C'
>>> unicodedata.name('あ')
'HIRAGANA LETTER A'
>>> unicodedata.name('ア')
'KATAKANA LETTER A'
>>> unicodedata.name('a')
'LATIN SMALL LETTER A'
如您所见,汉字和日文采用的汉字都被分类为CJK UNIFIED IDEOGRAPH
平假名和片假名正确识别。我没有测试韩文字符,但我认为它们也应该属于CJK UNIFIED IDEOGRAPH
。
此外,如果您只关心它是否是 CJK 字符/字母,这似乎更简单:
>>> import unicodedata
>>> unicodedata.category('你')
'Lo'
>>> unicodedata.category('桜')
'Lo'
>>> unicodedata.category('あ')
'Lo'
>>> unicodedata.category('ア')
'Lo'
>>> unicodedata.category('a')
'Ll'
>>> unicodedata.category('A')
'Lu'
根据这里,Ll
是小写,Lu
是大写,Lo
是其他。
您可以使用此正则表达式[\u2E80-\u9FFF]
来匹配 CJK 字符。