在Python中提取字符串
基本上,我想从一个文本文件中提取出字符串“AAA”、“BBB”、“CCC”、“DDD”...
...... (other text goes here).....
<TD align="left" class=texttd><font class='textfont'>AAA</font></TD>
..... (useless text here).....
<TD align="left" class=texttd><font class='textfont'>BBB</font></TD>
....(more text).....
<TD align="left" class=texttd><font class='textfont'>CCC</font></TD>
<TD align="left" class=texttd><font class='textfont'>DDD</font></TD>
......(more text).....
我想要的效果是,如果我这样做:
data = foo("file.txt")
我得到的结果是:
data = ['AAA','BBB','CCC','DDD']
有什么好的方法吗?我的文件不大...
5 个回答
0
如果你只是想从HTML文档中的所有标签里提取数据,而不需要保留这些标签本身,你可以这样做:
import HTMLParser
class DataOnlyParser(HTMLParser.HTMLParser):
def parse(self, text):
self.result = []
self.feed(text)
self.close()
return self.result
def handle_data(self, data):
data = data.strip()
if data:
self.result.append(data)
p = DataOnlyParser()
data = """
<TD align="left" class=texttd><font class='textfont'>AAA</font></TD>
<TD align="left" class=texttd><font class='textfont'>BBB</font></TD>
<TD align="left" class=texttd><font class='textfont'>CCC</font></TD>
<TD align="left" class=texttd><font class='textfont'>DDD</font></TD>
"""
print p.parse(data)
# ['AAA', 'BBB', 'CCC', 'DDD']
不过,如果你的选择条件比较复杂,或者输入的格式不太正确,使用像lxml这样的库会更好。
你绝对不想用正则表达式来“解析”HTML。详细信息可以查看这里。
0
你需要用到BeautifulSoup这个工具:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(your_file)
soup.find("font", "textfont")
2
你可以写一个正则表达式,但这在某种程度上就是在“解析”HTML。用正则表达式处理HTML的问题在于,HTML本身很复杂。它很少是完美的,这会导致你在依赖它获取数据时出现问题。
我个人会选择使用BeautifulSoup。它的功能比你需要的要多,但付出的努力却少得多。