假设我们有一张桌子:
Key|Val|Flag
01 |AAA| Y
02 |BBB| N
...
以这种方式封装到xml中:
<Data>
<R><F>Key</F><F>Val</F><F>Flag</F></R>
<R><F>01</F><F>AAA</F><F>Y</F></R>
<R><F>02</F><F>BBB</F><F>N</F></R>
...
</Data>
显然,可以有更多的列和行。
现在,我想使用单个正则表达式将XML解析回表。
我可以找到所有带有<;F>;([wd]*)</F>
,但我需要以某种方式将它们按行分组。
我想到了<;R>;(<;F>;([wd]*)</F>;)*</R>
,但是Python实现一无所获。
有人能帮忙编写正则表达式吗?
UPDATE Some context of the question.
我知道有很多XML解析库,但不幸的是,我的环境仅限于标准库。无论如何,感谢所有警告不要使用正则表达式进行XML解析的人。
我需要一些快速而肮脏的解决方案,因此我决定从正则表达式开始,稍后切换到解析。
到目前为止,我有代码:
...
row_p = r <R>(.*?)</R>
field_p = r <F>(.*?)</F>
table =
for row in re.finditer(row_p, xml):
table += | .join(re.findall(field_p, row.group(1))) +
...
它适用于小型数据集(约10000行),但不适用于大于500000行的表。
也许我会调查一下它失败的原因,但下一步我要采取的是——切换到一些标准的XML解析器ElementTree是第一个候选者。