首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中正则表达式的问题

python中正则表达式的问题
EN

Stack Overflow用户
提问于 2008-09-18 04:36:01
回答 5查看 1.1K关注 0票数 2

好的,我正在使用一个正则表达式来搜索站点中的所有标题信息。

我已经编译了正则表达式:

代码语言:javascript
复制
regex = re.compile(r'''
    <h[0-9]>\s?
    (<a[ ]href="[A-Za-z0-9.]*">)?\s?
    [A-Za-z0-9.,:'"=/?;\s]*\s?
    [A-Za-z0-9.,:'"=/?;\s]?
''',  re.X)

当我在python reg ex中运行它的时候。测试人员,它工作得很好。

示例数据:

代码语言:javascript
复制
<body>
    <h1>Dog </h1>
    <h2>Cat </h2>
    <h3>Fancy </h3>
    <h1>Tall cup of lemons</h1>
    <h1><a href="dog.com">Dog thing</a></h1>
</body>

现在,在REDemo中,它工作得很好。

然而,当我把它放到我的python代码中时,它只打印<a href="dog.com">

这是我的python代码,我不确定我是做错了什么,还是在翻译过程中丢失了什么。我很感谢你的帮助。

代码语言:javascript
复制
stories=[]
response = urllib2.urlopen('http://apricotclub.org/duh.html')
html = response.read().lower()
p = re.compile('<h[0-9]>\\s?(<a href=\"[A-Za-z0-9.]*\">)?\\s?[A-Za-z0-9.,:\'\"=/?;\\s]*\\s?[A-Za-z0-9.,:\'\"=/?;\\s]?')
stories=re.findall(p, html)
for i in stories:
    if len(i) >= 5:
        print i 

我还应该注意,当我从正则表达式中取出(<a href=\"[A-Za-z0-9.]*\">)?时,它对于非链接的<hN>行很有效。

EN

回答 5

Stack Overflow用户

发布于 2008-09-18 04:52:26

在过去的几天里,这个问题已经以多种形式被提出,所以我将非常清楚地说明这一点。

问:如何使用正则表达式解析HTML?

答:请不要这样。

使用BeautifulSouphtml5liblxml.html。请。

票数 23
EN

Stack Overflow用户

发布于 2008-09-18 04:43:01

使用正则表达式解析事物适用于正则语言。HTML不是一种常规的语言,现在你在网页上找到的东西完全是垃圾。BeautifulSoup使用类似浏览器的启发式方法来处理标记的超文本标记语言,因此您可以得到类似于浏览器显示内容的解析超文本标记语言。

缺点是它不是很快。有用于解析格式良好的html的lxml,但是如果您不能百分之百确定您的输入总是格式良好的,那么您应该真正使用BeautifulSoup。

票数 4
EN

Stack Overflow用户

发布于 2008-09-18 04:44:25

由于锚标记周围的大括号,该部分被解释为捕获组。这会导致只返回捕获组,而不是整个正则表达式匹配。

将整个正则表达式放在大括号中,您将看到正确的匹配项显示为返回的元组中的第一个元素。

但实际上,您应该使用真正的解析器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/90052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档