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]