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

问题描述

我有一个这样的字符串:

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+)(?=\|)

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','337277309'),('000000004','437277309')]


说明:

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...