簡體   English   中英

如何使用 python findall 提取公共部分?

[英]How do I use python findall to extract common part?

我對 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']

這個問題運氣好

非捕獲組(?:...)不會創建一個單獨的 memory 緩沖區與匹配的文本,但它仍然消耗匹配的文本,即它被添加到匹配值並且正則表達式索引是先進的。

你需要一個非消耗模式,一個積極的前瞻:

re.findall(r'\[\d{1,2}\].*?(?=\[\d{1,2}\]|end)', text)

請參閱正則表達式演示

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM