我使用編譯我正則表達式:蟒蛇正則表達式不匹配解碼unicode字符串
number_re = re.compile(ur'(?<![-_\.])\b([0-9]+|[0-9]+[0-9-_\.]*[0-9]+)\b(?![-_\.])'), re.UNICODE)
,並設法在下面的字符串匹配1990-1991:
mystring = 'フットボールリーグ1990-1991'
match = number_re.search(mystring)
>>> <_sre.SRE_Match at 0x25e1918>
match.group()
>>> '1990-1991'
但是當字符串被解碼(或者當它被傳入函數時)
mystring = 'フットボールリーグ1990-1991'.decode('utf-8')
>>> u'\u30d5\u30c3\u30c8\u30dc\u30fc\u30eb\u30ea\u30fc\u30b01990-1991'
match = number_re.search(mystring)
匹配不再發生,我猜它與邊界'\ b'不匹配,因爲它看起來像一個連續的字符串,但我不完全確定。
我認爲我已經把所有的unicode要求(用're.UNICODE'標誌編譯,並且把'ur'放在我的正則表達式字符串中。我要去嘗試的最後一件事是大家都說的Python regex library是好的,但我想知道我目前的東西有什麼問題!:)。
不混合Unicode和非Unicode字符串(字節)。 [您無法將Unicode字符串與字節模式匹配,反之亦然](http://docs.python.org/3/library/re.html) – jfs