Python + Regex:AttributeError: 'NoneType'オブジェクトに 'groups'属性がありません。

2013-03-05 17 views
15

私はサブセットを抽出したい文字列を持っています。これは、より大きなPythonスクリプトの一部です。Python + Regex:AttributeError: 'NoneType'オブジェクトに 'groups'属性がありません。

これは文字列です "モルトBéを、gràciesmohl behh、GRAH-syuhs"

import re 

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

私はアウトを引き出したいです。そして、そのために、私はre.searchを使用して、正規表現を使用しない:Result.groups()以来

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.group(5)Result.group(7))を行います。 しかし、なぜこのエラーが出るのか分かりません。正規表現はTextWranglerで動作しますが、なぜPythonでは使えませんか?私はPythonの初心者です。

+0

'htmlString'をUnicodeにデコードしようとしています – thkang

答えて

7
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)フラグを使用する必要があります。

私は初心者でもあり、私はこの問題に2時間以上直面しました。

31

AttributeErrorNonegroupsを呼び出しているため、方法はありません。

regex.searchNoneを返すと、正規表現で指定された文字列のパターンと一致するものが見つかりませんでした。

正規表現を使用して、試合が行われたかどうかをチェックするためにいいです:

Result = re.search(SearchStr, htmlString) 

if Result: 
    print Result.groups() 
+0

mohl behh、GRAH-syuhs)の()をエスケープするときに問題があるようです。私は '\('と '\\('でもどちらもうまく動作していないようです。 –

関連する問題