我有一个字符串:
<font face="ARIAL,HELVETICA" size="-2">
JUL 28 </font>
(它输出超过两行,因此必须有一个\ n。
我想提取<font></font>
标签之间的字符串。在这种情况下,它是JUL 28,但它可能是另一个日期或其他数字。
1)从字体标签之间提取值的最佳方法是什么?我以为我可以在">
和</
之间提取所有内容。
编辑:删除了第二个问题。
答案 0 :(得分:9)
虽然可以用正则表达式解析任意HTML,但它通常是一个死亡陷阱。有很多很好的工具可以解析HTML,包括BeautifulSoup,这是一个可以很好地处理破解以及良好HTML的Python库。
>>> from BeautifulSoup import BeautifulSoup as BSHTML
>>> BS = BSHTML("""
... <font face="ARIAL,HELVETICA" size="-2">
... JUL 28 </font>"""
... )
>>> BS.font.contents[0].strip()
u'JUL 28'
然后你只需要解析日期:
>>> datetime.strptime(BS.font.contents[0].strip(), '%b %d')
>>> datetime.datetime(1900, 7, 28, 0, 0)
datetime.datetime(1900, 7, 28, 0, 0)
答案 1 :(得分:6)
这里有很多选项。您可以选择像lxml这样的全面xml解析器,尽管您似乎需要特定于域的解决方案。我会使用多行正则表达式:
import re
rex = re.compile(r'<font.*?>(.*?)</font>',re.S|re.M)
...
data = """<font face="ARIAL,HELVETICA" size="-2">
JUL 28 </font>"""
match = rex.match(data)
if match:
text = match.groups()[0].strip()
现在你已经text
了,你可以很容易地把它变成一个日期:
from datetime import datetime
date = datetime.strptime(text, "%b %d")
答案 2 :(得分:1)
或者,您只需使用Beautiful Soup:
Beautiful Soup是一个Python HTML / XML解析器,专为快速周转项目而设计,如屏幕抓取
答案 3 :(得分:0)
grep是一个选项吗?
grep "<[^>]*>(.*)<\/[^>]*>" file
(。*)应符合您的内容。
答案 4 :(得分:0)
使用Scrapy的XPath选择器,如http://doc.scrapy.org/en/0.10.3/topics/selectors.html
所述或者,您可以使用诸如BeautifulSoup之类的HTML解析器,尤其是如果您希望以面向对象的方式对文档进行操作。
答案 5 :(得分:0)
Python有一个名为HTMLParser
的库。另请参阅SO中发布的以下问题,这与您正在寻找的内容非常相似:
How can I use the python HTMLParser library to extract data from a specific div tag?