在python中提取字符串

时间:2010-03-17 17:38:03

标签: python string text-extraction

基本上,我想从文本文件中提取字符串“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']

最好的方法是什么?我的文件不大...

基本上,我想从this file中提取“剩余上传数据传输”,其中HTML格式为THIS

5 个答案:

答案 0 :(得分:2)

您可以编写一个REGEX,但它会在某种程度上“解析”HTML。为HTML编写正则表达式的问题是HTML是一团糟。它很少是完美的,当你依赖它来获取数据时就会出现问题。

我个人会使用BeautifulSoup。它确实比你要求的更多,但也超出了努力。

答案 1 :(得分:0)

您想要BeautifulSoup

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(your_file)

soup.find("font", "textfont")

答案 2 :(得分:0)

def foo():
    input_file = open("myfile.txt", 'r')
    input = ''.join(input_file.readlines())

    looking_for = ['AAA', 'BBB', 'CCC', 'DDD']
    have = []

    for thing in looking_for:
        if thing in input:
            have.append(thing)
    return have

答案 3 :(得分:0)

在这样的情况下,尝试使用正则表达式(这将是真正的),使用预先编写的库,或者使用f = open() f.read()和您自己的解析器自己动手。

答案 4 :(得分: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。请参阅here