Вопрос по python-2.7, utf-8, python, regex – регулярное выражение python с вопросом utf8

8

Я получил файл, который включает в себя много строк простого текста UTF-8. Например, ниже, это китайский.

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

Сам файл был сохранен в формате utf-8. имя файла xx.txt

вот мой код на python, env - это python2.7

<code>#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()
</code>

Проблема здесь в том, что я не получил никаких результатов.

Я хочу получить десятичную строку из交易金额:0.01元здесь, который0.01.

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

Ваш Ответ

3   ответа
3

.search() поскольку.match() это как начать свое регулярное выражение с^то есть он проверяет только начало строки.

до сих пор не работает. Можете ли вы предоставить свой код для выполнения этой маленькой задачи, высоко ценится castiel
0

#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 в юникод.

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)
большое спасибо, & # x975E; & # x5E38; & # x8C22; & # x8C22; castiel
re.UNICODe работал для меня!

Похожие вопросы