【问题标题】:Python Regex HelpPython 正则表达式帮助
【发布时间】:2011-06-18 21:37:48
【问题描述】:

我正在尝试对 HTML 标记进行排序,但似乎无法正确处理。

到目前为止我做了什么

import urllib
import re

s = raw_input('Enter URL: ')
f = urllib.urlopen(s) 
s = f.read() 
f.close 
r = re.compile('<TAG\b[^>]*>(.*?)</TAG>',)
result = re.findall(r, s)
print(result)

我将“TAG”替换为我想查看的标签。

提前致谢。

【问题讨论】:

  • 使用 XML 解析器来解析 HTML。必填链接:stackoverflow.com/questions/1732348/…
  • 不要使用正则表达式解析 HTML。正则表达式是解析 HTML 的不够复杂的工具。如果有人要你这样做,用棍子敲打他们的头,然后用 BeautifulSoup 代替。这对你们俩来说都会减轻痛苦。
  • 你目前得到什么样的结果?
  • 如果您从 Web 扫描 html,则使用 xml 解析器不是一个好主意,某些 html 页面与 xml 兼容文件相距甚远。

标签: python html regex


【解决方案1】:

BS 的一个例子是这样的

from BeautifulSoup import BeautifulSoup
doc = ['<html><head><title>Page title</title></head>',
       '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
       '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
       '</html>']
soup = BeautifulSoup(''.join(doc))
soup.findAll('b')
[<b>one</b>, <b>two</b>]

至于正则表达式,可以使用

aa = doc[0]
aa
'<html><head><title>Page title</title></head>'
pt = re.compile('(?<=<title>).*?(?=</title>)')
re.findall(pt,aa)
['Page title']

【讨论】:

    【解决方案2】:

    我不完全清楚你想用正则表达式实现什么。例如,捕获两个 div 标签之间的内容适用于

    re.compile("<div.*?>.*?</div>")
    

    尽管使用上述嵌套 div 会遇到一些问题。

    【讨论】:

    • 我想你忘记了捕获组周围的括号。你的意思是:re.compile("(.*?)
      ")?
  • 他没有在他的代码中使用捕获组做任何事情,所以我认为没有必要。我相信有能力的程序员可以在需要时添加它。
  • 【解决方案3】:

    您真的应该尝试使用可以执行开箱即用的 HTML 解析的库。 Beautiful Soup 是我的最爱之一。

    【讨论】:

    • BeautifulSoup 对于这个来说是完美的
    • 这是一次正则表达式学习体验,也是我能想到的唯一真实示例。 IE。如果 dog.avicat.avipig.jpg 仍然存在,我可以将其排序为 dog.avi cat.avi pig.jpg
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 2023-03-26
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多