正则表达式可检测并替换具有重复捕获组的行,以删除pip requirements.txt文件中的重复包

问题描述

如果python requirements.txt文件具有相同版本的不同版本,则无效,表示为以下行(假定文件已排序):

agate==1.6.0
agate==1.7.0

我正在尝试编写一个正则表达式来检测重复的软件包(因为版本可能不同,所以没有行)。 我的捕获组由^([^=]+)==.+$表示。 Removing duplicated lines接近解决方案,因为它在最后一行使用了反向引用,但是我的反向引用仅适用于捕获组,而不是整个行。

解决方法

使用

检测这些字符串
\section{Foo}

请参见proof

EXPLANATION

\begin{ChapterStart}
  \ChapterTitle[l]{Foo}
\end{\ChapterStart}

Python:

(?sm)^([^=]+)==.*\n\1==
,

以下正则表达式使用Notepad ++替换功能在分类文件中工作

正则表达式^(.*)(==[\d\.]+)(\r?\n\1)==[\d\.]+$ 替换:$ 1 $ 2

工作原理:

正则表达式的第一部分捕获两组

  1. ^(.*):程序包名称(行星号,然后是==之前的任何字符(在第二组中)
  2. (==[\d\.]+):等号和封装版本(等号后的数字和点的任意组合)

正则表达式的第二部分与捕获了第一组的下一行中的以下程序包名称匹配,其中

  • (\r?\n\1):匹配第一个捕获组
  • ==[\d\.]+$:与第二行程序包名称匹配

替换使用$ 1 $ 2,其中

  • $ 1:第一个捕获的程序包名称为包
  • $ 2:第二个等号捕获版本的捕获组