2010-11-15 231 views
1
str1 = abdk3<h1>The content we need</h1>aaaaabbb<h2>The content we need2</h2> 

我们需要h1标签和h2标签内的内容。Python的正则表达式

这样做的最好方法是什么?谢谢

感谢您的帮助!

+7

*这样做的最佳方法是什么?* - 获取HTML解析器...? – kennytm 2010-11-15 07:38:30

+0

我的意思是我怎么写这个正则表达式? – user469652 2010-11-15 07:42:04

+0

如何可能没有人链接到[this](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)呢? – Maus 2012-09-13 23:13:19

回答

6

如果需要缩放的话,最好的方法就是使用BeautifulSoup。

>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup('abdk3<h1>The content we need</h1>aaaaabbb<h2>The content we need2</h2>') 
>>> soup.h1 
<h1>The content we need</h1> 
>>> soup.h1.text 
u'The content we need' 
>>> soup.h2 
<h2>The content we need2</h2> 
>>> soup.h2.text 
u'The content we need2' 

它也可以使用正则表达式来完成,但这可能更符合您的需求。你想要的更大的例子可能是好的。不知道你想分析什么,很难正确地帮助你。

+0

+1,如果你从h1和h2中获取元素数据,你最终可能会在别处做它;这将很好地工作 – Scott 2010-11-15 07:48:45

+1

+1而不是单词。 – Kobi 2010-11-15 07:49:14

+0

+1:该工作的正确工具! – Johnsyweb 2010-11-15 08:07:21

2

第一点建议:不要使用HTML/XML PARSING的正则表达式!

现在我们已经清除了那个,我建议你看看Beautiful Soup。还有其他可用于Python的SGML/XML/HTML解析器。然而,这是我们大多数人在现实世界中发现的处理马虎“标签汤”的最爱。它不要求输入符合标准和格式。如果你的浏览器可以设法渲染它,那么Beautiful Soup可能会设法为你解析它。

(仍倾向于使用正则表达式完成这个任务?思考“也不能说不好,我只是想提取只是什么在<h1>...</h1><h2>...</h2>容器。”还有......“我会从来没有需要处理任何其他角落案例“这种方式就是疯狂,你根据这种推理方法编写的代码将是脆弱的,它会适当地通过你的测试,然后它会变得越来越糟糕,每当你需要修复“只有一件事”。认真地说,导入一个真正的解析器并使用它)。