2016-07-21 2 views
0

У меня есть следующий текст, который я бы хотел проанализировать с регулярным выражением. Я хочу иметь все внутри td с классом «postcell». Я использую этот код, но это ничего не дает.parse html с регулярным выражением, иногда это не работает

re.finditer('<td class="postcell">(.+?)</td>', doc) 

Я DEF не хочу использовать BeautifulSoup

<td class="postcell"> 
<div> 
<div class="post-text" itemprop="text"> 
<p>Let us consider</p> 
<pre class="lang-py prettyprint"><code>x = ['1', '2', '3', '4', '5'] 
y = ['a', 'b', 'c', 'd', 'e'] 
</code></pre> 
<p>How do I get the required output <code>z</code>?</p> 
<pre class="lang-py prettyprint"><code>z = [('1', 'a') , ('b', '2') , ('c', '3') , ('d', '4') , ('e', '5')] 
</code></pre> 
</div> 
<div class="post-taglist"> 
<a href="https://stackoverflow.com/questions/tagged/python" class="post-tag js-gps-track" title="show questions tagged 'python'" rel="tag">python</a> <a href="https://stackoverflow.com/questions/tagged/list" class="post-tag js-gps-track" title="show questions tagged 'list'" rel="tag">list</a> 
</div> 
<table class="fw"> 
<tbody><tr> 
<td class="vt"> 
<div class="post-menu"><a href="https://stackoverflow.com/q/9853438" title="short permalink to this question" class="short-link" id="link-post-9853438">share</a><span class="lsep">|</span><a href="/posts/9853438/edit" class="suggest-edit-post" title="">improve this question</a></div> 
</td> 
<td align="right" class="post-signature"> 
<div class="user-info user-hover"> 
<div class="user-action-time"> 
<a href="/posts/9853438/revisions" title="show all edits to this post">edited <span title="2012-03-24 16:42:59Z" class="relativetime">Mar 24 '12 at 16:42</span></a> 
</div> 
<div class="user-gravatar32"> 
<a href="https://stackoverflow.com/users/35070/phihag"><div class="gravatar-wrapper-32"><img src="https://www.gravatar.com/avatar/6f92354195e8874dbee44d5c8714d506?s=32&amp;d=identicon&amp;r=PG" alt="" width="32" height="32" /></div></a> 
</div> 
<div class="user-details"> 
<a href="https://stackoverflow.com/users/35070/phihag">phihag</a> 
<div class="-flair"> 
<span class="reputation-score" title="reputation score 132,147" dir="ltr">132k</span><span title="31 gold badges"><span class="badge1"></span><span class="badgecount">31</span></span><span title="252 silver badges"><span class="badge2"></span><span class="badgecount">252</span></span><span title="308 bronze badges"><span class="badge3"></span><span class="badgecount">308</span></span> 
</div> 
</div> 
</div> </td> 
<td class="post-signature owner"> 
<div class="user-info "> 
<div class="user-action-time"> 
     asked <span title="2012-03-24 16:40:17Z" class="relativetime">Mar 24 '12 at 16:40</span> 
</div> 
<div class="user-gravatar32"> 
<a href="https://stackoverflow.com/users/1168528/karthik-reddi"><div class="gravatar-wrapper-32"><img src="https://www.gravatar.com/avatar/acce3b34402cd7646c175c273dee1616?s=32&amp;d=identicon&amp;r=PG" alt="" width="32" height="32" /></div></a> 
</div> 
<div class="user-details"> 
<a href="https://stackoverflow.com/users/1168528/karthik-reddi">Karthik Reddi</a> 
<div class="-flair"> 
<span class="reputation-score" title="reputation score " dir="ltr">10</span><span title="2 bronze badges"><span class="badge3"></span><span class="badgecount">2</span></span> 
</div> 
</div> 
</div> 
</td> 
</tr> 
</tbody></table> 
</div> 
</td> 
+1

Пожалуйста, [не используйте регулярное выражение для анализа XML/HTML] (http://stackoverflow.com/a/1732454/1934349). – paulotorrens

+1

Это было сказано здесь как минимум миллион раз: ** Не анализируйте HTML или XML с регулярным выражением **. Используйте парсер HTML DOM. Я не знаю, почему никто вообще не проводит никаких исследований здесь, прежде чем задавать другой вопрос. Почему я не могу разобрать HTML/XML с моим регулярным выражением? *, Чтобы найти эти миллионы упоминаний о том, почему этого не может быть сделано. Это мое подозрение, что те же люди спрашивают, почему они не могут исправить свои разбитые окна молотком. –

+0

Лучший комментарий на этот ответ: «Мне кажется, мне пора уходить с должности помощника. Не разбирайте HTML с офицером регулярных офицеров. Независимо от того, сколько раз мы это говорим, они не перестанут приходить каждый день ... каждый Час даже. Это потерянная причина, которую кто-то может немного побороть. Итак, продолжайте, анализируйте HTML с регулярным выражением, если нужно. Это только сломанный код, а не жизнь и смерть. «От bobince. Так что давайте бросим вместе ребята =/Я потерял счет, сколько раз я это сказал: ** Не разбирайте HTML или XML с регулярным выражением ** –

ответ

1

Вы забыли, чтобы избежать /.

re.finditer('<td class="postcell">(.+?)<\/td>', doc)

Другие комментаторам правы в том, что невозможно разобрать HTML с регулярным выражением вообще. Для вашего дела это может быть достаточно хорошо. Просто знайте ограничения, подобные этим регулярным выражениям, слепы к вложенности, поэтому вы можете столкнуться с такими крайними случаями, если в одной из ваших ячеек есть <\td>, ваш матч закончится раньше.

+0

Большое спасибо за ваш ответ! Мне просто интересно, почему это может сломаться? Это из-за вложенных тегов? – Erin

+0

Справа. Если вы очищаете stackoverflow, вы можете столкнуться с проблемами, если сообщение имеет теги «» из-за уценки или другого форматирования. Я не уверен, действительно ли какой-либо уценка вводит этот тег. –

+0

Например, ваше регулярное выражение будет соответствовать ' blah blah blah' as '' –

Смежные вопросы