2

以下を使用して正規表現をコンパイルしました。

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)

一致が発生しなくなりました。1 つの連続した文字列のように見えるため、境界 '\b' が一致しないことに関係していると推測していますが、正確にはわかりません。

すべての Unicode 要件 ('re.UNICODE' フラグでコンパイルされ、正規表現文字列に 'ur' も追加) をすべて入れたと思います。最後に試すのは、誰もが良いと言っているPython 正規表現ライブラリーです。 、しかし、私は現在のもののどこが悪いのか知りたいです! :)。

4

1 に答える 1

0
于 2013-07-18T09:02:44.910 に答える