繁体   English   中英

使用以前的结果搜索Python正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM