如何解决如何使用python findall提取公用部分?
我对re.findall有疑问
例如
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,text)
我得到了['[1]xxxxxxxx','[3]xxxxxx']
这个问题有运气吗
解决方法
非捕获组(?:...)
不会创建与文本匹配的单独的内存缓冲区,但仍会消耗匹配的文本,即将其添加到匹配值中并且正则表达式索引是高级的。
这里您需要一个非消耗模式,一个积极的前瞻:
re.findall(r'\[\d{1,2}\].*?(?=\[\d{1,2}\]|end)',text)
请参见regex demo。
(?=\[\d{1,2}\]|end)
模式匹配的位置后面紧跟着[
,一位或两位数字然后是]
或end
字符序列的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。