标签python中的部分文本

时间:2018-03-31 08:15:52

标签: python text-extraction

我有一个半结构化的.txt文件。该文件如下所示:

<tags>
    blabla<text>
              I want this
         </text>
    blabla<text>
               And this
           </text>
        bla<text>
                 and this
            </text>blabla
</tags>

我想在<text>标签内获取文字。我已经设法使用字符串分区和替换,但我不认为它非常有效或漂亮。

这是我的代码:

with open('collection.txt') as f:
 read_data = f.read()

text1 = read_data.partition("<text>")[2].partition("</text>")[0]
temp1 = read_data.replace(text1,'').replace('<text>','',1).replace('</text>','',1)
text2 = temp1.partition("<text>")[2].partition("</text>")[0]
temp2 = read_data.replace(text2,'').replace('<text>','',2).replace('</text>','',2)
text3 = temp2.partition("<text>")[2].partition("</text>")[0]

BeautifulSoup,元素树和其他XML解析器都不起作用。 有关如何改进我的代码的任何建议?我试过编译正则表达式,但无济于事。

4 个答案:

答案 0 :(得分:3)

使用XML解析器,例如xml.etreelive demo):

import xml.etree.ElementTree as ET
doc = ET.parse('collection.txt')
print([el.text.strip() for el in doc.findall('.//text')])
# output: ['I want this', 'And this', 'and this']

答案 1 :(得分:1)

正则表达式是你最好的朋友!

import re

p = re.compile(r'<text>([^</]*)</text>')
result = p.findall(data_txt)
result = [x.strip() for x in result]
print(result)

答案 2 :(得分:1)

您可以按如下方式使用BeautifulSoup来获取所有文本条目:

from bs4 import BeautifulSoup

with open('collection.txt') as f:
    read_data = f.read()

soup = BeautifulSoup(read_data, 'xml')

for text in soup.find_all('text'):
    print(text.get_text(strip=True))

给你:

I want this
And this
and this

你绝对应该避免尝试使用正则表达式来进行这种解析,因为对于更复杂的例子,它会很快失败,例如如果在数据中间使用了<!-- </text> -->等评论,则应忽略该评论。

答案 3 :(得分:1)

re.findall('<text>\s*.*\s*</text>', data)

的另一种解决方案