Python正则表达式字符串提取

1 投票
4 回答
1688 浏览
提问于 2025-04-17 02: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后面的文本(比如“作为第二语言的有机化学I”)以及这个URL。

我试过 ('<img src=(\w+)" width')('<img src="(\w+)"')('src="(\w+)"\swidth') 来获取URL,但都返回空。

我也试过 ('alt="(\w+)"') 来获取名称,但同样没有成功。

有人能帮忙吗?

4 个回答

2

虽然你应该不要用正则表达式来解析HTML,但我可以指出一个常见的错误,就是你使用了\w。这个只匹配字母(大写A-Z和小写a-z)、数字(0-9)和下划线。它不匹配斜杠和括号。如果你想从属性中提取数据,可以使用"([^"]*)"或者"(.*?)"

3

使用 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")

结果是:

src: http://images.efollett.com/books/978/047/012/9780470129296.gif
alt: Organic Chemistry I (as Second Language)
1

你可以试试 r'<img[^>]*\ssrc="(.*?)"'r'<img[^>]*\salt="(.*?)"'

我不确定你是不是在处理HTML。[^>]* 是为了确保在尖括号里面。\s 是用来避免一些像“xxxsrc”这样的标签,并且处理换行符。

撰写回答