Python:检查字符串是否包含中文字符?

cqc*_*991 10 python regex unicode python-2.x

这可能是一个字符串

ipath= "./data/NCDC/??/??/9705626661750dat.txt"
Run Code Online (Sandbox Code Playgroud)

或这个

ipath = './data/NCDC/ciampino/6240476818161dat.txt'
Run Code Online (Sandbox Code Playgroud)

我怎么知道第一个字符串包含中文

我发现这个答案可能有用: 使用Python和Regex查找字符串中的所有中文文本

但它没有成功:

import re
ipath= "./data/NCDC/??/??/9705626661750dat.txt"
re.findall(ur'[\u4e00-\u9fff]+', ipath) # => []
Run Code Online (Sandbox Code Playgroud)

xec*_*cgr 14

匹配的字符串也应该是unicode

>>> import re
>>> ipath= u"./data/NCDC/??/??/9705626661750dat.txt"
>>> re.findall(r'[\u4e00-\u9fff]+', ipath)
[u'\u4e0a\u6d77', u'\u8679\u6865']
Run Code Online (Sandbox Code Playgroud)


Rys*_*ech 10

使用\\p{Han}正则表达式PyPi regex

\n
import regex\nipath = "./data/NCDC/\xe4\xb8\x8a\xe6\xb5\xb7/\xe8\x99\xb9\xe6\xa1\xa5/9705626661750dat.txt"\nprint(regex.findall(r\'\\p{Han}+\', ipath) )\n# => [\'\xe4\xb8\x8a\xe6\xb5\xb7\', \'\xe8\x99\xb9\xe6\xa1\xa5\']\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅Python 证明

\n

regex.search足以检测:

\n
if regex.search(r\'\\p{Han}\', ipath):\n    print(f\'"{ipath}" contains Chinese!\')\n
Run Code Online (Sandbox Code Playgroud)\n


tim*_*geb 6

如果你只是想知道你的字符串中是否有中文字符你不需要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
Run Code Online (Sandbox Code Playgroud)


Rol*_*ony 5

对于我们这些不关心的人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]
... 
?
?
?
?
Run Code Online (Sandbox Code Playgroud)

编辑:对于完整的中文字符列表,此SO链接值得查看,因为范围U + 4E00..U + 9FFF未完成. Unicode中的汉字完整范围是什么?