2016-01-04 2 views
6

Строка может быть, этоPython: Проверьте, содержит ли строка китайский символ?

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

или это

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

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

Я нахожу этот ответ может быть полезным: Find all Chinese text in a string using Python and Regex

, но ничего не вышло:

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

Вы используете Python 2? В Python 3 он [кажется работает] (https://ideone.com/lPHSky) без 'r' при объявлении регулярного выражения. –

+3

'ipath = u" ./ data/NCD', пропущенный 'u' перед строкой. – Tushar

+1

Посмотрите на это [Python 2 demo] (https://ideone.com/i0unNw) - он работает для вас? –

ответ

7

Найденная строка должна быть юникода, а

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

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

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

Если вы хотите знать, является ли в вашей строке есть китайский символ, вам не нужен 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 
3

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

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

Edit: для полного списка китайских иероглифов это SO ссылка стоит посмотреть, как диапазон U + 4E00. .U + 9FFF не является полным.
What's the complete range for Chinese characters in Unicode?

Смежные вопросы