1

既知のパターンを持つHTMLページ内の文字列を見つけようとしています。たとえば、次のHTMLコードでは次のようになります。

<TABLE WIDTH="100%">
<TR><TD ALIGN="LEFT" width="50%">&nbsp;</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM WIDTH=50%><FONT SIZE=-1>( <STRONG>1</STRONG></FONT> <FONT SIZE=-2>of</FONT> <STRONG><FONT SIZE=-1>1</STRONG> )</FONT></TD></TR></TABLE>
<HR>
<TABLE WIDTH="100%">
<TR>    <TD ALIGN="LEFT" WIDTH="50%"><B>String 1</B></TD>
    <TD ALIGN="RIGHT" WIDTH="50%"><B><A Name=h1 HREF=#h0></A><A  HREF=#h2></A><B><I></I></B>String</B></TD>
</TR>
<TR><TD ALIGN="LEFT" WIDTH="50%"><b>String 2.</B>
</TD>
<TD ALIGN="RIGHT" WIDTH="50%"> <B>
String 3
</B></TD>
</TR>
</TABLE>
<HR>
<font size="+1">String 4</font><BR>
...

文字列4を見つけたいのですが、常にその間にあることを知っています

<HR><font size="+1">
</font><BR>

REを使用して文字列を検索するにはどうすればよいですか?

編集:

私は次のことを試しましたが、成功しませんでした。

p = re.match('<HR><font size="+1">(.*?)</font><BR>',html)

ありがとう。

4

3 に答える 3

3
re.findall(r'<HR>\s*<font size="\+1">(.*?)</font><BR>', html, re.DOTALL)

findallは、正規表現の角かっこで囲まれたすべてのリストを返します。re.DOTALLを使用したので、ドットは行の終わりもキャプチャします。

\s*空白があるかどうかわからなかったので使用しました。

于 2012-07-02T14:07:41.613 に答える
2

これは機能しますが、それほど堅牢ではない可能性があります。

import re
r = re.compile('<HR>\s?<font size="\+1">(.+?)</font>\s?<BR>', re.IGNORECASE)
r.findall(html)

適切なHTMLパーサーを使用することをお勧めします。BeautifulSoupは優れていて使いやすいです。調べる。

于 2012-07-02T12:57:20.907 に答える
0
re.findall(r'<HR>\n<font size="\+1">([^<]*)<\/font><BR>', html, re.MULTILINE)
于 2012-07-02T13:02:06.820 に答える