1. ホーム
  2. python

[解決済み】 Regex: AttributeError: 'NoneType' オブジェクトには 'groups' という属性がありません。

2022-02-01 19:12:17

質問

サブセットを抽出したい文字列があります。これは、より大きなPythonスクリプトの一部である。

これがその文字列です。

import re

htmlString = '</dd><dt> Fine, thank you.&#160;</dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'

どれを抜きたいかというと、"。 モルトベー、グラシアス モルトベー、グラシアス となります。そして、そのために私は re.search :

SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'

Result = re.search(SearchStr, htmlString)

print Result.groups()
AttributeError: 'NoneType' object has no attribute 'groups'

以降 Result.groups() は動作しませんし、私が作りたい抽出もできません(すなわち Result.group(5)Result.group(7) ). しかし、なぜこのようなエラーが発生するのか理解できないのですが?TextWranglerでは正規表現が使えるのに、なぜPythonでは使えないのでしょうか?私はPythonのビギナーです。

どのように解決するのですか?

import re

htmlString = '</dd><dt> Fine, thank you.&#160;</dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'

SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'

Result = re.search(SearchStr.decode('utf-8'), htmlString.decode('utf-8'), re.I | re.U)

print Result.groups()

そのように動作します。この式には非ラテン文字が含まれているので、通常は失敗します。Unicodeにデコードしてre.U(Unicode)フラグを使うしかないですね。

私も初心者で、何度かその問題に直面しました。