问题描述
data="000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|"
除了使用split之外,还有什么办法可以像这样分组,我不使用split('|')的原因是因为split会生成太多列表,当列表太大时会消耗内存:
[[000000002,ROOT,237277309],[000000003,337277309],[000000004,437277309]]
也许是这样的代码:
import re
ROOT count left '|' night digt
解决方法
如何使用这个正则表达式:
(\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','337277309'),('000000004','437277309')]
说明:
捕获组是您最好的朋友。通过将每个术语(\d+
和 ROOT
)放在括号中,您可以让正则表达式匹配它们,但也可以单独存储它们的值,从而得到您想要的输出。
快速说明:我使用正向预测 (?=\|)
基本上是为了告诉正则表达式匹配后应该跟一个 |
,但不匹配管道本身.