9
4

3 に答える 3

18

コードにはいくつかの問題があります。まず、 を使用する必要がありますre.compile(ur'<unicode string>')。また、re.UNICODE フラグを追加するのも良いことです (ただし、ここで本当に必要かどうかはわかりません)。\d+次の 1 つは、一連の数字だけで小数を処理しないため、まだ一致を受信しない\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)
于 2012-05-11T06:45:59.493 に答える
4

.search()sinceを使用する必要がある.match()のは、正規表現を^で開始するようなものです。つまり、文字列の先頭のみをチェックします。

于 2012-05-11T06:27:42.713 に答える
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 に変換する必要はありません。

于 2016-10-31T10:22:06.523 に答える