Python正则表达式字符串提取
我想用正则表达式从这个字符串中提取两个字符串。
'<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”这样的标签,并且处理换行符。