[英]Python Regular Expression searching using previous result
抱歉,我是新来的,但是我找不到我最不知道该怎么问的问题的答案。
可以说我有一个XML文件,其内容如下:
<fields>
<field1>
<name>Frank</name>
</field1>
<field2>
<name>Bob</name>
</field2>
<field3>
<name>Spam</name>
</field3>
</fields>
我想删除任何名称= Bob的地方。 我可以试试
regex = re.compile("<fields>.*<field/d><name>Bob</field/d>.*</fields>"
data = regex.sub("", data"
我的缺点是和之间的所有内容都在删除。 如何指定我希望/ d两者相同,以便仅删除和之间的内容? 实际上,我希望生成的XML看起来像
<fields>
<field1>
<name>Frank</name>
</field1>
<field3>
<name>Spam</name>
</field3>
</fields>
谢谢!
使用“反向引用”:
import re
text = """<fields>
<field1>
<name>Frank</name>
</field1>
<field2>
<name>Bob</name>
</field2>
<field3>
<name>Spam</name>
</field3>
</fields>"""
pattern = re.compile(
r'(<field(?P<n>\d)>[\s\S]+Bob[\s\S]+</field(?P=n)>)')
print(pattern.sub('', text))
# <fields>
# <field1>
# <name>Frank</name>
# </field1>
#
# <field3>
# <name>Spam</name>
# </field3>
# </fields>
https://docs.python.org/2/library/re.html :
(?P = name)对命名组的反向引用; 它与早期名称为name的组匹配的任何文本都匹配。
就像@JimDennis提到的那样,使用正则表达式解析/处理XML数据确实是一个坏主意。 请改用XML解析器!
请不要使用正则表达式来解析XML,HTML或其他基于SGML的文本。 在最底层,大多数解析器使用正则表达式。 但是解析它们的过程充满了陷阱,如果您使用已经编写(和调试)的库来执行此操作,则代码将更加健壮。
我建议阅读: 如何在Python中解析XML? 在此处的StackOverflow上可以获得更多详细信息。
为了回答您的特定问题,您可以使用正则表达式反向引用 ...来执行此操作,该正则表达式反向引用可用于“捕获”匹配文本的部分并引用它们(通常是使用匹配结果的代码,甚至只是在正则表达式的后面部分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.