【发布时间】:2017-08-08 11:21:02
【问题描述】:
<name>name for the group</name><description>server-description</description><resource>10.1.1.1:*</resource><resource>10.1.1.2:*</resource><resource>10.1.1.3:*</resource><apply>selected</apply><network-connect-acl><<name>name2</name><description>description2/description><resource>10.2.2.0/26:*</resource><apply>selected</apply>
我已将 XML 文件转换为上述值的字符串并尝试捕获多次出现的 <resource>ABC</resource> 我有以下正则表达式
在python3中定义
regex = re.compile(r'(<name>.*?</name>)(.*?)(<resource>.*?</resource>)+')
print(regex.findall(string))
但不是捕获所有三个事件,它只捕获第一个:
('<name>name for the group</name>', '<description>server-
description</description>', '<resource>10.1.1.1:*</resource>')
我希望正则表达式能够捕获和标记之间的字符串。如果我们将上面的字符串作为样本,我希望能像这样捕获它;
<name>name for the group</name><resource>10.1.1.1:*</resource><resource>10.1.1.2:*</resource><resource>10.1.1.3:*</resource><name>name2</name><description>description2/description><resource>10.2.2.0/26:*</resource>
这样做时,我会将“name”元素与其关联的资源元素组合在一起,这样与此正则表达式匹配的第一个元组将包含以下内容:
('<name>nameforthegroup</name>','<resource>10.1.1.1:*</resource>
<resource>10.1.1.2:*</resource><resource>10.1.1.3:*</resource>')
第二个元组等堡垒会是这样的
('<name>name2</name>','<resource>10.2.2.0/26:*</resource>)
该文件包含数百条这样的记录,但是当我运行代码时,我得到如下内容:
[('<name>nameforthegroup</name>', '<description>server-description</description>', '<resource>10.1.1.1:*</resource>'), ('<name>name2</name>', '<description>description2/description>', '<resource>10.2.2.0/26:*</resource>')]
【问题讨论】:
-
欢迎来到 SO。很高兴您使用代码 sn-p,但首先您不仅要明确显示正则表达式和希望的结果(您也做得不好),还要显示要匹配的文本。
-
谢谢,抱歉输入错误。我已经更新了它以提供更多解释。