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+)(?=\|)
完整代码如下:
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
)放在括号中,您可以告诉正则表达式匹配它们,但也可以分别存储它们的值,从而得到您想要的输出。
快速说明:我基本上使用了正向前瞻 (?=\|)
来告诉正则表达式匹配后应该跟一个 |
,但不是匹配管道本身。
我有这样的字符串:
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+)(?=\|)
完整代码如下:
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
)放在括号中,您可以告诉正则表达式匹配它们,但也可以分别存储它们的值,从而得到您想要的输出。
快速说明:我基本上使用了正向前瞻 (?=\|)
来告诉正则表达式匹配后应该跟一个 |
,但不是匹配管道本身。