【问题标题】:Python Regex String ExtractionPython正则表达式字符串提取
【发布时间】:2011-09-12 06:55:05
【问题描述】:

我正在尝试使用正则表达式从该字符串中提取两个字符串 -

'<img src="http://images.efollett.com/books/978/047/012/9780470129296.gif" width="80" height="100" alt="Organic Chemistry I (as Second Language)" />'

我想要 src 之后的 URL 和 alt 之后的文本(所以 Organic Chemistry I(作为第二语言))和 url)

我尝试了('&lt;img src=(\w+)" width')('&lt;img src="(\w+)"')('src="(\w+)"\swidth') 的网址,但都返回空。

我也尝试过('alt="(\w+)"') 的名称,但还是失败了。

有人可以帮忙吗?

【问题讨论】:

    标签: python regex string


    【解决方案1】:

    使用lxml

    import lxml.html
    
    html_string = '<img src="http://images.efollett.com/books/978/047/012/9780470129296.gif" width="80" height="100" alt="Organic Chemistry I (as Second Language)" />'
    
    img = lxml.html.fromstring(html_string)
    
    print "src:", img.get("src")
    print "alt:", img.get("alt")
    

    给予

    来源:http://images.efollett.com/books/978/047/012/9780470129296.gif alt:有机化学 I(作为第二语言)

    【讨论】:

      【解决方案2】:

      虽然你应该not be parsing HTML with regexes,但我可以在这里指出正则表达式的一个常见错误,那就是你使用\w。仅匹配 A-Z、a-z、0-9 和下划线。不是斜线,不是括号。如果您尝试从属性中提取数据,请使用"([^"]*)""(.*?)"

      【讨论】:

      • 两个问题——首先我如何提取我想要的信息(我使用的是 Beautiful Soup,上面的另一种形式是作为 BeautifulSoup 标签)?其次,我可以使用什么正则表达式来获得我想要的?
      • 那么抱歉,我不知道您使用的是Beautiful Soup,它一个HTML解析器! this SO question有提示。
      【解决方案3】:

      你可以试试r'&lt;img[^&gt;]*\ssrc="(.*?)"'r'&lt;img[^&gt;]*\salt="(.*?)"'

      我不知道您是否正在处理 HTML。 [^&gt;]* 是为了确保在括号内。 \s 用于避免一些像“xxxsrc”这样的标签,并注意换行。

      【讨论】:

      • 这可行,但会回溯。对于小的 img 标签可能没问题。 +1 表示正确性。
      【解决方案4】:

      我不知道 python,但是这个正则表达式可能有帮助吗?

      <img.*?src="([^"]*)".*?alt="([^"]*)".*?>
      

      【讨论】:

      • 如果 src 出现在 alt 之前,则此方法有效。还有一个效率提示:不要在正则表达式中间使用.*.*? 在这种情况下更合适。
      • 谢谢,已更新。你是对的,只有按照问题中的描述给出字符串(altsrc 属性之后)这个正则表达式才有意义。
      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多