首页 > 解决方案 > Python正则表达式:多行模式匹配两个以上的子字符串

问题描述

我想使用正则表达式来查找文件中的合并冲突。

我发现以前的帖子展示了如何找到与此结构匹配的模式

FIRST SUBSTRING 
/* several 
    new 
     lines 
*/
SECOND SUBSTRING

它适用于以下正则表达式:(^FIRST SUBSTRING)(.+)((?:\n.+)+)(SECOND SUBSTRING)

但是,我需要匹配这种模式:

FIRST SUBSTRING 
/* several 
    new 
     lines 
*/
SECOND SUBSTRING
/* several 
    new 
     lines 
*/
THIRD SUBSTRING

其中第一个、第二个和第三个子字符串分别是<<<<<<<, 。=======>>>>>>>

我试(^<<<<<<<)(.+)((?:\n.+)+)(=======)(.+)((?:\n.+)+)(>>>>>>)了一下,但它不起作用,你可以在这个演示中看到((^<<<<<<<)(.+)((?:\n.+)+)(=======)确实有效,但它不是我想要的)

标签: pythonregex

解决方案


你的表情确实有一些细微的变化。字符长度不完全匹配。(.+)并且当文本中没有字符时,您在第二个子字符串之后要求至少一个字符。

(<<<<<<<)(.+)((?:\n.+)+)(=======)(.*)((?:\n.+)+)(>>>>>>>)

从那时起,它会按照您的预期进行分组(评论中的答案没有)。您可能想区分的代码和他们的代码。

另外,如果您必须在工作表达式中进行选择,我会选择您的而不是建议的可读性选项。正则表达式不是阅读友好的东西,使用重复(以及其他复杂性)会使代码更难阅读。这也适用于?:,只需查询特定组,无需避免在那里创建组。


推荐阅读