регулярное выражение python с вопросом utf8

Я получил файл, который включает в себя много строк простого текста 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.

Почему этот код не работает? Кто-нибудь может мне это объяснить, я понятия не имею.

Ответы на вопрос(3)

Если вы используете 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 в юникод.

Решение Вопроса

Есть несколько проблем с вашим кодом. Сначала вы должны использовать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() это как начать свое регулярное выражение с^то есть он проверяет только начало строки.

Ваш ответ на вопрос