我对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,2}\].*?)(?:\[\d{1,2}\]|end)',text)
的时候
我有['[1]xxxxxxxx', '[3]xxxxxx']
这个问题有什么收获吗?
发布于 2020-08-13 04:01:02
非捕获组(?:...)
不会为匹配的文本创建单独的内存缓冲区,但它仍然会使用匹配的文本,即将其添加到匹配值中,并提升正则表达式索引。
这里你需要一个非消耗的模式,一个积极的前瞻:
re.findall(r'\[\d{1,2}\].*?(?=\[\d{1,2}\]|end)', text)
请参阅regex demo。
(?=\[\d{1,2}\]|end)
模式匹配的位置紧跟[
、一个或两个数字,然后是]
或end
字符序列。
https://stackoverflow.com/questions/63372144
复制相似问题