1

中にあるものをすべて手に入れたい。私はこのコードを書きました:

matchObj = re.search(r'<tr>(.*?)</tr>', txt, re.M|re.I|re.S)

しかし、私は最初のグループしか取得しません。

どうすればすべてのグループを取得できますか?

前もって感謝します :)


findall

matchObj = re.findall(r'<tr>(.*?)</tr>', txt, re.M|re.I|re.S)

search指定された文字列の最初のもののみを検索します。

正規表現で使用できるさまざまな方法の詳細を読むことができます。

ただし、HTMLを解析しているようです。HTMlパーサーを使用してみませんか?

4

2 に答える 2

9

findall

matchObj = re.findall(r'<tr>(.*?)</tr>', txt, re.M|re.I|re.S)

search指定された文字列の最初のものだけを見つけます。

regexで使用できるさまざまな方法について詳しく読むことができます。

ただし、HTML を解析しているようです。なぜHTMl パーサーを使用しないのですか?

于 2012-12-11T15:49:49.160 に答える
4

複数の一致を取得するには、を使用しますre.findall()

ただし、正規表現を使用してHTMLを解析すると、醜く複雑になります。代わりに、適切なHTMLパーサーを使用してください。

Pythonにはいくつかの選択肢があります。

  • ElementTreeは標準ライブラリの一部です
  • BeautifulSoupは人気のサードパーティライブラリです
  • lxmlは、高速で機能豊富なCベースのライブラリです。

ElementTreeの例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.html')
for elem in tree.findall('tr'):
    print ElementTree.tostring(elem)

BeautifulSoupの例:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('filename.html'))
for row in soup.select('table tr'):
    print row
于 2012-12-11T15:49:51.640 に答える