我使用编译我正则表达式:蟒蛇正则表达式不匹配解码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