python - 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.+)+)(=======)
确实有效,但它不是我想要的)
解决方案
你的表情确实有一些细微的变化。字符长度不完全匹配。(.+)
并且当文本中没有字符时,您在第二个子字符串之后要求至少一个字符。
(<<<<<<<)(.+)((?:\n.+)+)(=======)(.*)((?:\n.+)+)(>>>>>>>)
从那时起,它会按照您的预期进行分组(评论中的答案没有)。您可能想区分您的代码和他们的代码。
另外,如果您必须在工作表达式中进行选择,我会选择您的而不是建议的可读性选项。正则表达式不是阅读友好的东西,使用重复(以及其他复杂性)会使代码更难阅读。这也适用于?:
,只需查询特定组,无需避免在那里创建组。
推荐阅读
- android - 制作动画时如何将视图置于前面?
- android - 穿戴 OS 动画 Android
- xamarin.forms - 如何在不阻塞用户界面的情况下从 Web 服务带来的数据创建 TabbedPage?
- android - 在实施 firebase 后,许多导入语句突然变得未使用并且无法解析许多符号
- botframework - Microsoft Healthbot API 获取场景堆栈信息
- javascript - 在函数中调用 React Hook “useSelector”
- save - PIL 使用没有文件名的文件对象保存
- c++ - 在 msvc 调试模式下堆栈中有 cdcdcdcd 是否正常
- mysql - 如何使用外键执行 MySQL 批量插入并在无效时设置为 NULL
- ruby - 如何优化 HTTP::Headers.normalize_header?