我有一些xml,它是带有一些不匹配标签的nlp提取工具。我试图使用正则表达式查找不匹配的标签并解决问题,但是我正卡在正则表达式部分。
我能够选择<Name>
标签的所有实例,但是我只想选择不包含的结束标签,并使用replace添加匹配的结束标签。如何缩小尺寸并正确更换?
xx
的实际结果是(<Name>.*)</Name>
,但我需要它是<Name>Margrethe II</Name>
。
查找: <Name>.*
替换: (<Name>.*)</Name>
import re
mmt = """<Sovereigns>
<Queens>
<Queen>
<Name>Elizabeth II</Name>
<Country>Great Britain and Northern Ireland</Country>
</Queen>
<Queen>
<Name>Margrethe II
<Country>Denmark</Name></Country>
</Queen>
</Queens>
</Sovereigns>"""
# remove extra closing tag
x = re.sub("</Name><", "<", mmt)
# add closing tag to those missing
xx = re.sub("<Name>.*", "(<Name>.*)</Name>", mmt)
答案 0 :(得分:0)
您希望您的xx
行是:
xx = re.sub("<Name>(?!.*</Name>)(.*)", r"<Name>\1</Name>", mmt)
<Name>
匹配<Name>
(?!.*</Name>)
前瞻性,表示该行的其余部分不能包含</Name>
(.*)
与捕获组1中的其余行匹配。替换项包含对捕获组1的后向引用。