2015-06-16 149 views
0

^[一二三四五六七]、的不匹配一、Unicode的正则表达式匹配字符类字符中国

^一、匹配一、

是我指定中文字符类的错误方法吗?

我从文件读取正则表达式。

+0

你的unicode字符串或字节指定字符串?包含你的代码的文件的编码是什么? – BrenBarn

+0

“你的文件的编码?”你的意思是我的python脚本文件?你在哪里指定文件的编码? – Tim

回答

3

对我的作品,

>>> import re 
>>> re.match(u'^[一二三四五六七]、', u'一、') 
<_sre.SRE_Match object; span=(0, 2), match='一、'> 
>>> re.match(u'^[一二三四五六七]、', u'一、').group(0) 
'一、' 

我想你没有定义的正则表达式为unicode字符串。

在python3,这将是

# -*- coding: utf-8 -*- 

import re 

with open('file') as f: 
    reg = f.read().strip() 
    print(re.match(reg, u'一、').group(0)) 
+0

添加'u'也适用于那些不需要'u'的情况吗? – Tim

+0

另外我用'myregex = open('myfile')。read()'从文本文件中读取正则表达式,其中'myfile'的内容是'^ [一二三四五六七],'。那么我如何指定'u'? – Tim

+0

http://stackoverflow.com/questions/4182603/python-how-to-convert-a-string-to-utf-8 –

1

你需要确保你阅读使用正确的编码文件:

with open('my-regex-file', encoding='utf-8') as f: 
    regex = re.compile(f.read()) 
with open('my-text-file', encoding='utf-8') as f: 
    text = f.read() 
if regex.match(text): 
    print("It's a match!")