首页 > 解决方案 > 列表中的python正则表达式组字符串

问题描述

我有一个这样的字符串:

data="000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|"

除了使用split之外,有什么方法可以像这样分组它,我不使用split('|')的原因是因为split会生成太多列表,当列表太大时会消耗内存:

[[000000002,ROOT,237277309],[000000003,ROOT,337277309],[000000004,ROOT,437277309]]

也许像这样的一些代码:

import re
ROOT count left '|' night digt

标签: pythonpython-3.xnsregularexpression

解决方案


如何使用这个正则表达式:

(\d+)\|(ROOT)\s*\|(\d+)(?=\|)

正如你在这里看到的


这是完整的代码:

import re

data="000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|"

print(re.findall(r'(\d+)\|(ROOT)\s*\|(\d+)(?=\|)', data))

哪个输出:[('000000002', 'ROOT', '237277309'), ('000000003', 'ROOT', '337277309'), ('000000004', 'ROOT', '437277309')]


解释:

捕获组是您最好的朋友。通过将每个术语 (\d+ROOT) 放在括号中,您可以告诉正则表达式匹配它们,但也可以单独存储它们的值,这会产生您想要的输出。

快速说明:我基本上使用了积极的前瞻(?=\|)来告诉正则表达式匹配应该后跟 a |,但不匹配管道本身。


推荐阅读