0


タグの発生に基づいて HTML ドキュメント/文字列を分割する最良の方法は何ですか? 私が現在持っている解決策を以下に示しましたが、非常に面倒で、読みにくいと思います。私も正規表現を試してみましたが、正規表現を使用して HTML を解析するべきではないと言われました

for i, br in enumerate(soup.findAll('b')):
line_value = ''
line_values = []
next = br.next
while (next):
    if next and isinstance(next, Tag) and next.name == 'br':
        line_values.append(line_value)
        line_value = ''
    else:
        stripped_text = ''.join(BeautifulSoup(str(next).strip()).findAll(text=True))
        if stripped_text:
            line_value += stripped_text
    next = next.nextSibling
print line_values

私が解析しているHTMLのサンプルは次のとおりです。

<p><font size="1" color="#800000"><b>09:00
  <font> - </font>
  11:00
  <br>
  CE4817
  <font> - </font>LAB <font>- </font>
  2A
  <br>
   B2043 B2042
  <br>

  Wks:1-13
  </b></font>
  </p>

そして、私のコードの現在の結果:

[u'09:00 - 11:00', u'CE4817 - LAB- 2A', u'B2043 B2042']
[u'11:00 - 12:00', u'CE4607 - TUT- 3A', u'A1054']
4

2 に答える 2

0

正規表現で分割するには

import re
p = re.compile(r'<br>')
filter(None, p.split(yourString))

次に、配列内の返された各文字列から他の html タグを削除できます。

Strip html from strings in pythonのように既存の関数を使用するか、HtmlAgilityPack を使用せずに HTML タグを削除 する の質問に対する私の回答を確認してください。

この回答も確認してください: RegEx match open tags except XHTML self-contained tags

タスクを達成するには、実際にhtmlパーサーを使用する必要があります

于 2012-09-24T15:21:27.880 に答える
0

これを試して :

正規表現

<p><font size="1" color="#800000"><b>(\d{2}:\d{2}).*?(\d{2}:\d{2}).*?(\w{2}\d{4}).*?<font> - </font>(\w+)\s*<font>- </font>\s*(\d\w)\s*<br>\s*(\w\d{4}\s*\w\d{4})\s*<br>[\s\S]*?</p>

モード

m - 複数行

これは、html コードの構造が変わらない限り機能します。

于 2012-09-24T15:22:04.917 に答える