2011-03-30 7 views
2

トラブルのpython再試合のUnicode文字

# -*- coding: utf8 -*- 

import re 

locations = [ 
    "15°47'S 47°55'W", 
    "21º 18' N, 157º 51' W", 
    "32°46′58″N 96°48′14″W", 
] 

rx = re.compile(ur""" 
    ^\d+[°º] 
    | 
    ^\d+[\xb0\xba] 
    """, re.X) 

for loc in locations: 
    if not rx.match(loc): 
     print loc 

Pythonで正規表現のUnicode文字に一致する結果持つ:

15°47'S 47°55'W 
21º 18' N, 157º 51' W 
32°46′58″N 96°48′14″W 

は、Unicodeの文字に一致するように見えることはできませんが!

答えて

5

locationsはユニコード文字列ではないためです。

locations = [ 
    u"15°47'S 47°55'W", 
    u"21º 18' N, 157º 51' W", 
    u"32°46′58″N 96°48′14″W", 
] 
+0

これは問題ではありませんが、Pythonは自動的に変換します。 – phihag

+1

@phihag: 'print re.match(u"° "、"° ")'はPython 2.7ではNoneです。 – kennytm

+0

ああ、あなたはまったく正しい。この「自動変換」は、両側がASCIIのサブセットである場合にのみ機能します。 – phihag