首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python re.findall组织列表

Python re.findall组织列表
EN

Stack Overflow用户
提问于 2020-05-29 00:20:21
回答 1查看 58关注 0票数 2

我有一个文本文件,其中的条目如下:

代码语言:javascript
复制
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <Applications_GetResponse xmlns="http://www.country.com">
         <Applications>
            <CS_Application>
               <Name>Spain</Name>
               <Key>2345364564</Key>
               <Status>NORMAL</Status>
               <Modules>
                  <CS_Module>
                     <Name>zaragoza</Name>
                     <Key>8743249725</Key>
                     <DevelopmentEffort>0</DevelopmentEffort>
                     <LogicalDBConnections/>
                  </CS_Module>
                  <CS_Module>
                     <Name>malaga</Name>
                     <Key>8743249725</Key>
                     <DevelopmentEffort>0</DevelopmentEffort>
                     <LogicalDBConnections/>
                  </CS_Module>
               </Modules>
               <CreatedBy>7</CreatedBy>
            </CS_Application>
            <CS_Application>
               <Name>UK</Name>
               <Key>2345364564</Key>
               <Status>NORMAL</Status>
               <Modules>
                  <CS_Module>
                     <Name>london</Name>
                     <Key>8743249725</Key>
                     <DevelopmentEffort>0</DevelopmentEffort>
                     <LogicalDBConnections/>
                  </CS_Module>
                  <CS_Module>
                     <Name>liverpool</Name>
                     <Key>8743249725</Key>
                     <DevelopmentEffort>0</DevelopmentEffort>
                     <LogicalDBConnections/>
                  </CS_Module>
               </Modules>
               <CreatedBy>7</CreatedBy>
            </CS_Application>
        </Applications>
      </Applications_GetResponse>
   </soap:Body>
</soap:Envelope>

我想对它进行分析,并按照城市的顺序获得国家的名称。

我用python re.finall尝试了一些东西,但没有得到任何类似的东西

代码语言:javascript
复制
print("HERE APPLICATIONS")
applications = re.findall('<CS_Application><Name>(.*?)</Name>', response_apply.text)
print(applications)
print("HERE MODULES")
modules = re.findall('<CS_Module><Name>(.*?)</Name>', response_apply.text)
print(modules)

返回:

代码语言:javascript
复制
host-10$ sudo python3 capture.py 
HERE APPLICATIONS
['Spain', 'UK']
HERE MODULES
['zaragoza', 'malaga', 'london', 'liverpool']

预期的结果是,我希望结果是这样的:

代码语言:javascript
复制
HERE
The Country: Spain - Cities: zaragoza,malaga
The Country: UK - Cities: london,liverpool
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-29 01:04:19

正则表达式不适合解析xml。最好使用xml解析器..如果你想要正则表达式的解决方案,那么希望下面的代码能帮助你。

代码语言:javascript
复制
import re

s = """\n<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n   <soap:Body>\n      <Applications_GetResponse xmlns="http://www.country.com">\n         <Applications>\n            <CS_Application>\n               <Name>Spain</Name>\n               <Key>2345364564</Key>\n               <Status>NORMAL</Status>\n               <Modules>\n                  <CS_Module>\n                     <Name>zaragoza</Name>\n                     <Key>8743249725</Key>\n                     <DevelopmentEffort>0</DevelopmentEffort>\n                     <LogicalDBConnections/>\n                  </CS_Module>\n                  <CS_Module>\n                     <Name>malaga</Name>\n                     <Key>8743249725</Key>\n                     <DevelopmentEffort>0</DevelopmentEffort>\n                     <LogicalDBConnections/>\n                  </CS_Module>\n               </Modules>\n               <CreatedBy>7</CreatedBy>\n            </CS_Application>\n            <CS_Application>\n               <Name>UK</Name>\n               <Key>2345364564</Key>\n               <Status>NORMAL</Status>\n               <Modules>\n                  <CS_Module>\n                     <Name>london</Name>\n                     <Key>8743249725</Key>\n                     <DevelopmentEffort>0</DevelopmentEffort>\n                     <LogicalDBConnections/>\n                  </CS_Module>\n                  <CS_Module>\n                     <Name>liverpool</Name>\n                     <Key>8743249725</Key>\n                     <DevelopmentEffort>0</DevelopmentEffort>\n                     <LogicalDBConnections/>\n                  </CS_Module>\n               </Modules>\n               <CreatedBy>7</CreatedBy>\n            </CS_Application>\n        </Applications>\n      </Applications_GetResponse>\n   </soap:Body>\n</soap:Envelope>\n"""
pattern1 = re.compile(r'<CS_Application>([\s\S]*?)</CS_Application>')
pattern2 = re.compile(r'<Name>(.*)?</Name>')

for m in re.finditer(pattern1, s):
    ss = m.group(1)
    res = []
    for mm in re.finditer(pattern2, ss):
        res.append(mm.group(1))
    print("The Country: "+res[0]+" - Cities: "+",".join(res[1:len(res)]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62069587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档