【问题标题】:How do I use python findall to extract common part?如何使用 python findall 提取公共部分?
【发布时间】:2020-08-12 07:52:35
【问题描述】:

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

这个问题祝你好运

【问题讨论】:

标签: python regex python-re


【解决方案1】:

非捕获组(?:...) 不会为匹配的文本创建单独的内存缓冲区,但它仍然消耗匹配的文本,即它被添加到匹配值和正则表达式索引是高级的。

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

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

请参阅regex demo

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多