2017-08-06 9 views
0

私は奇妙な問題があります。 Regexをオンラインで解析するとうまくいくが、Pythonはそれに合わない。オンラインでもPython正規表現は一致しません

正規表現: ()*<div>(.*?)<\/div>()*または<div>(.*?)<\/div>または<div>(.*?)</div>

toMatch:

&lt;Storage {}&gt;86400<div>Uhrzeit in Sekunden: 65567</div><div>Timer: 20833</div> 

のpythonでこれらの試合のいずれもが、オンライン(http://regexr.com/またはhttps://pythex.org/)を行う

これはのわずか一部であります私は何をしたいのですか?しかし、私が欲しいのは、div内のデータです。

EDIT: 私はesp8266でmicropythonを使用しています。私は限られており、HTMLパーザーを使用することはできません。

+1

人は正規表現を使用してHTMLを解析しないでください! HTMLパーサーは理由のために存在します。また、なぜ空のキャプチャグループを使用していますか? Pythonでは 'match'ではなく' findall'を使う必要があります。 – DeepSpace

+1

申し訳ありませんが、私は正確でした。私はちょっと詳しく説明したくありませんでした。私はesp8266でmicropythonを使用しています。私はそこに限られている。 –

答えて

1

生の文字列をre.compile()に渡していないことが問題であると思われます。私はこれを行う場合、私はあなたが欲しいと思うものを手に入れる:\は、Pythonの文字列エスケープ文字と正規表現のエスケープ文字の両方であるため、

>>> rx = re.compile(r"<div>(.*?)<\/div>") 
>>> rx.findall("&lt;Storage {}&gt;86400<div>Uhrzeit in Sekunden: 65567</div><div>Timer: 20833</div>") 
>>> ['Uhrzeit in Sekunden: 65567', 'Timer: 20833'] 

あなたは生の文字列を必要としています。それがなければ\を意味するときに\\を正規表現に入れなければならず、それが非常に迅速に混乱します。