我使用以下方法编译了我的正则表达式:
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 正则表达式库,但我想知道我现在的东西有什么问题!:)。