0

Python でこの正規表現を使用する場合:

pathstring = '<span class="titletext">(.*)</span>'
pathFinderTitle = re.compile(pathstring)

私の出力は次のとおりです。

Govt has nothing to do with former CAG official RP Singh:
Sibal</span></a></h2></div><div class="esc-lead-article-source-wrapper">
<table class="al-attribution single-line-height" cellspacing="0" cellpadding="0">
<tbody><tr><td class="al-attribution-cell source-cell">
<span class='al-attribution-source'>Times of India</span></td>
<td class="al-attribution-cell timestamp-cell">
<span class='dash-separator'>&nbsp;- </span>
<span class='al-attribution-timestamp'>&lrm;46 minutes ago&lrm;

テキスト検索は、最初の "< /span>" で停止する必要があります。

ここで何が悪いのか提案してください。

4

4 に答える 4

2

.*任意の文字の貪欲な一致です。できるだけ多くの文字を消費します。代わりに、貪欲でないバージョン.*?を使用してください。

pathstring = '<span class="titletext">(.*?)</span>'
于 2012-11-23T22:24:38.163 に答える
2

正規表現に夢中になる代わりに、 pyqueryを使用することをお勧めします... lxml に基づいており、jQuery を使用するのと同じように HTML の解析が簡単になります。

次のようなものが必要です。

doc = PyQuery(html)
doc('span.titletext').text()

beautifulsoupを使用することもできますが、結果は常に同じです。HTML の解析に正規表現を使用しないでください。生活を楽にするためのツールが世の中にあります。

于 2012-11-23T22:28:05.440 に答える
1

.*一致</span>するので、最後のものまで続きます。

最良の答えは、正規表現で html を解析しないことです。lxmlライブラリ (または類似のもの) を使用します。

from lxml import html

html_string = '<blah>'
tree = html.fromstring(html_string)
titles = tree.xpath("//span[@class='titletext']")
for title in titles:
    print title.text

適切な xml/html パーサーを使用すると、時間と手間を大幅に節約できます。独自のパーサーを作成する場合は、不正な形式のタグ、コメント、およびその他の無数のものに対応する必要があります。車輪を再発明しないでください。

于 2012-11-23T22:28:48.933 に答える
0

この種のことを行うのに最適なBeautifulSoupを同じように簡単に使用することもできます。

#using BeautifulSoup4, install by "pip install BeautifulSoup4"
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
result = soup.find('span', 'titletext')

そして、あなたが探しているようにwith クラスresultを保持します。<span>titletext

于 2012-11-24T00:12:13.810 に答える