2016-01-04 8 views
6

Una stringa forse questoPython: controlla se una stringa contiene caratteri cinesi?

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

o questo

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

Come faccio a sapere la prima stringa contiene cinese?

Trovo questa risposta forse utile: Find all Chinese text in a string using Python and Regex

ma non ha funzionato:

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

Stai usando Python 2? In Python 3, sembra [funzionante] (https://ideone.com/lPHSky) senza 'r' quando si dichiara la regex. –

+3

'ipath = u" ./ dati/NCD', manca 'u' prima della stringa – Tushar

+1

Dai un'occhiata a questo [demo Python 2] (https://ideone.com/i0unNw) - funziona per te? –

risposta

7

la stringa corrispondente dovrebbe essere unicode così

>>> 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")) 

Uscita: ./data/NCDC/上海/虹桥/9705626661750dat.txt [u'\u4e0a\u6d77', u'\u8679\u6865']

È necessario decodificare l'input per renderlo unicode.

o

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

'' è un bytestring su Python 2. Ciascuna aggiungere from __future__ import unicode_literals nella parte superiore del modulo o utilizzare letterali Unicode: u'':

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

Se si vuole solo sapere se c'è un carattere cinese nella stringa che non è necessario re.findall, utilizzare re.search e il fatto che gli oggetti di corrispondenza sono veri.

>>> 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

E per quelli di noi che non si preoccupano per 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: per l'elenco completo dei caratteri cinesi questo SO collegamento è la pena di guardare come la gamma U + 4E00. .U + 9FFF non è completo.
What's the complete range for Chinese characters in Unicode?