python - 列表中的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
解决方案
如何使用这个正则表达式:
(\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 |
,但不匹配管道本身。
推荐阅读
- javascript - 有没有办法使用 Puppeteer 浏览仪表板?
- python - 如何在 discord py 中创建默认命令?
- excel - 运行宏,从主工作表中对多张工作表的数据进行排序和输出
- git - GIT还原误区
- python - 如何从 gitpython 执行原始 git 命令?
- javascript - Instagram API 仅在浏览器中工作
- google-cloud-storage - Elfinder 重命名、复制、移动操作卡住,通过 Google Cloud 集成继续显示进度弹出窗口
- laravel - 如何在 Laravel 7 中登录和注册其他自定义表
- networking - 关闭受密码保护的共享停止工作
- go - 从 Go HTTP 请求返回数据给客户端