带有utf8问题的python正则表达式

时间:2012-05-11 06:25:07

标签: python regex utf-8 python-2.7

我有一个文件,其中包含许多简单的utf-8文本行。如下,by by,它是中文。

PROCESS:类型:关爱积分[NOTIFY]   交易号:2012022900000109   订单号:W12022910079166    交易金额:0.01元    交易状态:true 2012-2-29 10:13:08

文件本身以utf-8格式保存。文件名是xx.txt

这是我的python代码,env是python2.7

#coding: utf-8
import re
pattern = re.compile(r'交易金额:(\d+)元')
for line in open('xx.txt'):
    match = pattern.match(line.decode('utf-8'))
    if match:
        print match.group()

这里有问题的是我没有结果。

我想从交易金额:0.01元获取十进制字符串,这里是0.01

为什么这段代码不起作用?任何人都可以向我解释,我毫不知道。

3 个答案:

答案 0 :(得分:18)

您的代码存在一些问题。首先,您应该使用re.compile(ur'<unicode string>')。另外很高兴添加re.UNICODE标志(虽然不确定是否真的需要)。下一个是你仍然不会收到匹配,因为\d+不处理小数只是一系列数字,你应该使用\d+\.?\d+代替(你想要数字,可能是一个点和一个数字)。示例代码:

#coding: utf-8

text = u"PROCESS:类型:关爱积分[NOTIFY]   交易号:2012022900000109   订单号:W12022910079166    交易金额:0.01元    交易状态:true 2012-2-29 10:13:08"
import re
pattern = re.compile(ur'交易金额:(\d+\.?\d+)元', re.UNICODE)

print pattern.search(text).group(1)

答案 1 :(得分:3)

您需要使用.search(),因为.match()就像使用^启动正则表达式一样,即它仅检查字符串的开头。

答案 2 :(得分:0)

如果您使用utf-8,则可以使用flags = re.LOCALE

#coding: utf-8
import re
pattern = re.compile(r'交易金额:(\d+\.?\d+)元', flags=re.LOCALE)
for line in open('xx.txt'):
    match = pattern.match(line)

更多详情,请参阅re.LOCALE。无需将utf-8转换为unicode。