首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python findall解压公共部分?

如何使用python findall解压公共部分?
EN

Stack Overflow用户
提问于 2020-08-12 15:52:35
回答 1查看 61关注 0票数 1

我对re.findall有意见

例如:

代码语言:javascript
运行
复制
text = '[1]xxxxxxxx[2]xxxxxxxx[3]xxxxxx[4]xxxxxxxxxend'
re.findall('(\[\d{1,2}\].*?)(?:\[\d{1,2}\]|end)',text)

我想要的是提取["[1]xxxxxxxx","[2]xxxxxxxx","[3]xxxxxx","[4]xxxxxxxxx"]

但是当我做re.findall('(\[\d{1,2}\].*?)(?:\[\d{1,2}\]|end)',text)的时候

我有['[1]xxxxxxxx', '[3]xxxxxx']

这个问题有什么收获吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-13 04:01:02

非捕获组(?:...)不会为匹配的文本创建单独的内存缓冲区,但它仍然会使用匹配的文本,即将其添加到匹配值中,并提升正则表达式索引。

这里你需要一个非消耗的模式,一个积极的前瞻:

代码语言:javascript
运行
复制
re.findall(r'\[\d{1,2}\].*?(?=\[\d{1,2}\]|end)', text)

请参阅regex demo

(?=\[\d{1,2}\]|end)模式匹配的位置紧跟[、一个或两个数字,然后是]end字符序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63372144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档