【发布时间】:2019-12-17 20:14:39
【问题描述】:
我有一些 xml,它是一个带有一些不匹配标签的 nlp 提取工具。我试图然后使用正则表达式来查找不匹配的标签并纠正问题,但我被困在正则表达式部分。
我可以选择<Name> 标签的所有实例,但我只想选择那些没有结束标签的实例,并使用替换来添加匹配的结束标签。如何缩小范围并正确更换?
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)
【问题讨论】:
-
这些查找/替换操作是否只需要在单行上进行?
-
我认为这可能是非法的,但不确定
<Name>Margrethe II <Country>Denmark</Name></Country> -
查找
r"(?s)(<Name>(?:(?!<).)*(?=<|$)(?!</Name>))"替换r"\1</Name>"