蟒蛇正则表达式使用UTF8问题(python regular expression with utf

2019-06-24 08:27发布

我有一个文件,其中包括简单的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

为什么没有此代码的工作? 任何人都可以向我解释,我完全不知道自己。

Answer 1:

有你的代码的几个问题。 首先,你应该使用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)


Answer 2:

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



Answer 3:

如果您使用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。



文章来源: python regular expression with utf8 issue