0

我有一个像这样的字符串:

text = ' A <EM ID="5103" CATEG="ORGANIZACAO" TIPO="INSTITUICAO">Legião da Boa    Vontade</EM> comemora amanhã o <EM ID="5104" CATEG="VALOR" TIPO="CLASSIFICACAO">10º.</EM> aniversário da sua implantação em <EM ID="5105" CATEG="LOCAL" TIPO="HUMANO">Portugal</EM> com cerimónias de carácter religioso e de convívio -- disse ontem fonte da organização. '

如果我使用:

     re.sub('<[^>]*>', '', text)

我会有这样的东西

A Legião da Boa Vontade comemora amanhã o 10º. aniversário da sua implantação em Portugal com cerimónias de carácter religioso e de convívio -- disse ontem fonte da organização. '

但我想保留 CATEGS .. 喜欢<CATEG= "ORGANIZACAO">

像:

A `<CATEG="ORGANIZACAO">`Legião da Boa Vontade comemora amanhã o `<CATEG="VALOR" >`10º. aniversário da sua implantação em <CATEG="LOCAL">Portugal com cerimónias de carácter religioso e de convívio -- disse ontem fonte da organização.

我该怎么做?

4

3 回答 3

2

试试这个:

In [32]: text
Out[32]: u' A <EM ID="5103" CATEG="ORGANIZACAO" TIPO="INSTITUICAO">Legi\xe3o da Boa    Vontade</EM> comemora amanh\xe3 o <EM ID="5104" CATEG="VALOR" TIPO="CLASSIFICACAO">10\xba.</EM> anivers\xe1rio da sua implanta\xe7\xe3o em <EM ID="5105" CATEG="LOCAL" TIPO="HUMANO">Portugal</EM> com cerim\xf3nias de car\xe1cter religioso e de conv\xedvio -- disse ontem fonte da organiza\xe7\xe3o. '

In [33]: re.sub(r'<EM[^C]*(CATEG="[^"]+")[^>]*>', r'<\1>', text).replace(r'</EM>', '')
Out[33]: u' A <CATEG="ORGANIZACAO">Legi\xe3o da Boa    Vontade comemora amanh\xe3 o <CATEG="VALOR">10\xba. anivers\xe1rio da sua implanta\xe7\xe3o em <CATEG="LOCAL">Portugal com cerim\xf3nias de car\xe1cter religioso e de conv\xedvio -- disse ontem fonte da organiza\xe7\xe3o. '

rexeg 简化了开始标签,而replace删除了结束标签。

对正则表达式使用原始字符串是一个好习惯,请避免对正则表达式进行意外更改。

于 2013-05-16T18:20:05.863 回答
2

(根据您的评论,可以保留有效标记)如果您想利用旨在解析和修改 HTML 的库,这可以工作(基于此答案

import BeautifulSoup

text = ' A <EM ID="5103" CATEG="ORGANIZACAO" TIPO="INSTITUICAO">Legião da Boa    Vontade</EM> comemora amanhã o <EM ID="5104" CATEG="VALOR" TIPO="CLASSIFICACAO">10º.</EM> aniversário da sua implantação em <EM ID="5105" CATEG="LOCAL" TIPO="HUMANO">Portugal</EM> com cerimónias de carácter religioso e de convívio -- disse ontem fonte da organização. '

""" Remove Specific """
REMOVE_ATTRIBUTES = ['id','tipo']
soup = BeautifulSoup.BeautifulSoup(text)
for tag in soup.recursiveChildGenerator():
    try:
        tag.attrs = [(key,value) for key,value in tag.attrs if key not in REMOVE_ATTRIBUTES]
    except AttributeError:
        # 'NavigableString' object has no attribute 'attrs'
        pass

print(soup.prettify())

""" Keep Specific """
KEEP_ATTRIBUTES = ['categ']
soup = BeautifulSoup.BeautifulSoup(text)
for tag in soup.recursiveChildGenerator():
    try:
        tag.attrs = [(key,value) for key,value in tag.attrs if key in KEEP_ATTRIBUTES]
    except AttributeError:
        # 'NavigableString' object has no attribute 'attrs'
        pass

print(soup.prettify())
于 2013-05-16T18:26:17.427 回答
0

您还可以使用 ElementTree:

from xml.etree import cElementTree as ElementTree
tree = ElementTree.parse(file_name)
root = tree.getroot()

content = ""
for item in root.iter():
    if item.tag == 'CATEG':
        # Do stuff with item
        content += item.text
    else:
        content += item.text
于 2017-11-09T18:44:08.380 回答