2012-03-23 3 views
1

可能性の重複:
RegEx match open tags except XHTML self-contained tagsPythonの正規表現 - すべてのテーブルセルの内容を抽出

私のようなものに見える文字列を持っている場合は

...

"<tr><td>123</td><td>234</td>...<td>697</td></tr>" 

基本的にはn個のセルを持つ表の行。

各セルの値を取得する最も簡単な方法は、Pythonです。つまり、リストまたは配列に格納されている値「123」、「234」、「697」、またはこれまでに最も簡単な値がほしいのです。

私は

re.match 

を使用する場合、私はそれが何かを見つけるために取得することはできませんよ、正規表現を使用しようとしました。試してみると

re.search 

私は最初のセルしか入手できません。しかし、私はすべての細胞を取得したい。 n個の細胞でこれを行うことができない場合、固定数の細胞でどのようにしますか?

答えて

5

マークアップがマークアップの大きなセットの一部である場合は、HTMLパーサー付きのツールを使用することをお勧めします。
このようなツールの1つはBeautifulSoupです。

>>> markup = '''"<tr><td>123</td><td>234</td>...<td>697</td></tr>"''' 
>>> from bs4 import BeautifulSoup as bs 
>>> soup = bs(markup) 
>>> for i in soup.find_all('td'): 
...  print(i.text) 

結果:

 
123 
234 
697 
+0

BeautifulSoupの良いチュートリアルをお勧めしますので、すべてのセルを行ごとに取得できますか?おかげで –

+0

ドキュメントは素晴らしいですし、いくつかの例が含まれています:http://www.crummy.com/software/BeautifulSoup/bs4/doc/ – bernie

0

これを行わないでください。適切なHTMLパーサーを使用して、xpathのようなものを使用して、必要な要素を取得してください。

多くの人がlxmlを好んでいます。このタスクでは、BeautifulSoupバックエンドを使用するか、BeautifulSoupを直接使用することをお勧めします。これは、正式な形式の有効な文書を生成することが知られているソースからのマークアップではないと思われます。

+0

私はxml.etree.cElementTreeを好む – Vayn

+0

@Vaynこれは、既知のマークアップには最適です。 – Marcin

+0

@Vayn: 'xml.etree.cElementTree'の使い方を教えてください。 :D – bernie

0

ツリーが作成された要素を使用してlxmlの
ここでは、そのツールを使用して必要なものを見つけるための一つの方法です。要素ツリーの各要素は、タグに関する情報を保持します。

from lxml import etree 
root = etree.XML("<root><a x='123'>aText<b/><c/><b/></a></root>") 
elements = root.findall(".//a") 
tag = elements[0].tag 
attr = elements[0].attr 

私はlxmlのは、このコンピュータにインストールされていないと私はあなたがATTRを取得するための要素の末尾に追加するかを正確にはわかりません。 .attrが機能しない場合は、要素からattrを取得するために使用するものをGoogleに提供する必要があります。

関連する問題