我有一个文件,其中包括简单的UTF-8文本的多条线路。 如下面,靠了靠,这是中国人。
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
。
为什么没有此代码的工作? 任何人都可以向我解释,我完全不知道自己。
有你的代码的几个问题。 首先,你应该使用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)
您需要使用.search()
因为.match()
是像开始您正则表达式^
在字符串的开头,即它仅检查。
如果您使用UTF-8,你可以使用标志= 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。