Python: проверьте, содержит ли строка китайский символ?

строка может быть это

ipath= "./data/NCDC/上海/虹桥/9705626661750dat.txt"

или это

ipath = './data/NCDC/ciampino/6240476818161dat.txt'

как узнать, что первая строка содержит китайский?

Я нахожу этот ответ может быть полезен: найти весь китайский текст в строке с помощью Python и Regex

но это не сработало:

import re
ipath= "./data/NCDC/上海/虹桥/9705626661750dat.txt"
re.findall(ur'[u4e00-u9fff]+', ipath) # => []

7 ответов


соответствующая строка также должна быть unicode

>>> import re
>>> ipath= u"./data/NCDC/上海/虹桥/9705626661750dat.txt"
>>> re.findall(ur'[\u4e00-\u9fff]+', ipath)
[u'\u4e0a\u6d77', u'\u8679\u6865']

Если вы просто хотите знать, есть ли китайский иероглиф в строку вам не нужно re.findall используйте re.search и тот факт, что объекты в матче честная.

>>> import re
>>> ipath= u'./data/NCDC/上海/虹桥/9705626661750dat.txt'
>>> ipath2 = u'./data/NCDC/ciampino/6240476818161dat.txt'
>>> for x in (ipath, ipath2):
...     if re.search(u'[\u4e00-\u9fff]', x):
...         print 'found chinese character in ' + x
... 
found chinese character in ./data/NCDC/上海/虹桥/9705626661750dat.txt

и для тех из нас, кто не заботится о re:

>>> ipath= u"./data/NCDC/上海/虹桥/6240476818161dat.txt"
>>> for i in range(len(ipath)):
...  if ipath[i] > u'\u4e00' and ipath[i] < u'\u9fff':
...   print ipath[i]
... 
上
海
虹
桥

Edit: для полного списка китайских символов эта ссылка SO стоит посмотреть как диапазон U+4E00..У+9FFF неполная. каков полный диапазон китайских символов в Unicode?


import re
ipath= raw_input()
print re.findall(ur'[\u4e00-\u9fff]+', ipath.decode("utf-8"))

выход:./data/NCDC/上海/虹桥/9705626661750dat.txt [u'\u4e0a\u6d77', u'\u8679\u6865']

вам нужно декодировать вход, чтобы сделать его unicode.

или

 import re
 ipath= unicode(raw_input(),encoding="utf-8")
 print re.findall(ur'[\u4e00-\u9fff]+', ipath)

'' является bytestring на Python 2. Либо добавить from __future__ import unicode_literals в верхней части модуля или используйте литералы unicode:u'':

>>> import re
>>> ipath= u"./data/NCDC/上海/虹桥/9705626661750dat.txt"
>>> re.findall(ur'[\u4e00-\u9fff]+', ipath)
[u'\u4e0a\u6d77', u'\u8679\u6865']

в python 3.6 я использовал это

def find_china_symbols(text):
"""

:param text: input text with wrong symbols
:return: True if incorrect char exists in text
"""

for char in text:
    if ord(char) > 10000:
        print(char, ': ', ord(char))
        return True

по данным этот вопрос, диапазон должен быть [\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC]