Skip to main content
 首页 » 编程设计

Python findall 和正则表达式

2025年05月04日22cloudgamer

我正在解析一个包含两种不同类型的行的 xml 文件(下面称为 xml):

1. <line a="a1" b="b1" c="c1"> 
2. <line a="a2" c="c2"> 

我试图只从第二种类型中提取 a2 和 c2,但是这个正则表达式也捕获第一种类型:

>>> list = re.findall('<line a="(.*)" c="(.*)">', xml) 
>>> print(list) 
[('a1" b="b1', 'c1'), ('a2', 'c2')] 

如何只捕获第二种类型?

请您参考如下方法:

这对于像 ElementTree 这样的适当的 XML 解析库更有意义。 ,而不是求助于正则表达式。例如:

>>> xmlstr = """\ 
... <root> 
...   <line a="a1" b="b1" c="c1"></line> 
...   <line a="a2" c="c2"></line> 
... </root> 
... """ 
>>> import xml.etree.ElementTree as ET 
>>> root = ET.XML(xmlstr) 
>>> root.findall('./line') 
[<Element 'line' at 0x226db70>, <Element 'line' at 0x226de48>] 
>>> filtered = [line for line in root.findall('./line') if line.get('b') is None] 
>>> for line in filtered: 
...     print ET.tostring(line) 
... 
<line a="a2" c="c2" /> 
 
>>>