在Python 3中使用正则表达式跳过XML元素

时间:2018-11-09 21:47:16

标签: python regex

我有一个XML文档,我希望在其中提取特定标签(例如-

)中包含的某些文本
<title>Four-minute warning</title>
<categories>
<category>Nuclear warfare</category>
<category>Cold War</category>
<category>Cold War military history of the United Kingdom</category>
<category>disaster preparedness in the United Kingdom</category>
<category>History of the United Kingdom</category>
</categories>

<bdy>
some text
</bdy>

在这个玩具示例中,如果我想通过使用Python 3-中的以下正则表达式代码来提取标签中包含的所有文本,

# Python 3 code using RE-
file = open("some_xml_file.xml", "r")
xml_doc = file.read()
file.close()

title_text = re.findall(r'<title>.+</title>', xml_doc)

if title_text:
    print("\nMatches found!\n")
    for title in title_text:
        print(title)
else:
    print("\nNo matches found!\n\n")

它给我XML标签中的文本以及标签。单个输出的示例是-

<title>Four-minute warning</title>

我的问题是,我应该如何在re.findall()或re.search()方法中构建模式,以便跳过和标签,而我得到的只是它们之间的文本。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

只需在正则表达式中使用捕获组即可(re.findall()将处理其余的情况)。例如:

import re

s = '<title>Four-minute warning</title>'

title_text = re.findall(r'<title>(.+)</title>', s)

print(title_text[0])
# OUTPUT
# Four-minute warning