我有一个文件,其中包含许多简单的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
。
为什么这段代码不起作用?任何人都可以向我解释,我毫不知道。
答案 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)
答案 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。