Python重新查找所有匹配的重复模式

时间:2019-08-07 20:17:38

标签: python regex

我正在尝试解析以下格式的半结构化文本:

text = "A. xxxxxxx\n\nxxx\n\nxxx\n\n\nB. xxxxxx\n\nxxx\n\nxxx\n\n\nC. xxxxxx\n\nxxx\n\nxxx\n\n\nD. xxxxxx\n\nxxx\n\nxxx"

我想将每个部分都归为不同的组。我目前正在尝试使用正则表达式进行解析,该正则表达式在大写字母后跟一个句点的文本中查找文本:

re.findall(r"([A-Z]\.[\s\S]*?)(?:\n[A-Z]\.|$)", text)

但是,这仅解析A和C部分:

['A. xxxxxxx\n\nxxx\n\nxxx\n\n', 'C. xxxxxx\n\nxxx\n\nxxx\n\n']

如何修改正则表达式,以使比赛的最后部分不被排除在以后的比赛之外?

由于各小节之间的新行数量可能会发生变化,因此我无法按新行分割。

2 个答案:

答案 0 :(得分:3)

使用前瞻性(可选)摆脱捕获组:

>>> print re.findall(r"[A-Z]\.[\s\S]*?(?=\n[A-Z]\.|$)", text)
['A. xxxxxxx\n\nxxx\n\nxxx\n\n', 'B. xxxxxx\n\nxxx\n\nxxx\n\n', 'C. xxxxxx\n\nxxx\n\nxxx\n\n', 'D. xxxxxx\n\nxxx\n\nxxx']

请注意使用(?=\n[A-Z]\.|$)(零宽度超前断言),该断言仅断言给定文本的存在而没有实际匹配。

答案 1 :(得分:1)

尝试

CMakeLists.txt

尽管这一个

MYLIB_INCLUDE_DIRS

https://regex101.com/r/t1R28Q/1

永远不会失败。