1

これは私の正規表現です:

(?P=<streetname>[a-zæøå ]+)(?:[ ]+)(?P=<housenumber>\d+)(?:[ ]+),(?:[ ]+)(?P=<postalcode>\d{1,4})(?:[ ]+)(?P=<city>[a-zæøå ]+)

すべてのグループ名にASCII文字のみが含まれているのに、なぜエラーが発生するのでしょうか。

トレースバック(最後の最後の呼び出し):
  ファイル"addrtools.py"、46行目
    主要()
  ファイル"addrtools.py"、43行目、メイン
    extract_address('Testaddress 15B、1234 Oslo')
  extract_addressのファイル「addrtools.py」、35行目
    match = re.match(pat_full、string)
  ファイル"/Users/tomas/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/re.py"、137行目、一致
    return _compile(pattern、flags).match(string)
  ファイル"/Users/tomas/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/re.py"、242行目、_compile
    エラーを発生させる、v#式が無効
sre_constants.error:グループ名の文字が正しくありません

pat_full確かに上記の正規表現が含まれていることを確認しました。また、私のドキュメントはUTF-8でエンコードされており、UTF-8モードに設定されています(# --*-- Encoding: UTF-8 --*--)。

4

1 に答える 1

9

パターンを使用して(?P=<name>...)います。これは、「nameという名前の以前のグループと一致したテキストに一致する」ことを意味します。streetnameただし、以前に定義したようなグループはありません。

を削除し=て、実際の名前付きグループにします。

>>> re.compile('(?P<streetname>[a-zæøå ]+)(?:[ ]+)(?P<housenumber>\d+)(?:[ ]+),(?:[ ]+)(?P<postalcode>\d{1,4})(?:[ ]+)(?P<city>[a-zæøå ]+)')
<_sre.SRE_Pattern object at 0x102e6a620>

これはおそらくあなたが最初にやろうとしていたことです。:-)

于 2012-09-08T11:57:27.670 に答える