python 列表中的正则表达式组字符串

python regular expression group string in list

我有这样的字符串:

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

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

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

As you can see here.


完整代码如下:

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)放在括号中,您可以告诉正则表达式匹配它们,但也可以分别存储它们的值,从而得到您想要的输出。

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