Regex 使用vim在单行中查找重复项
假设我有一个包含多行的文件,比如Regex 使用vim在单行中查找重复项,regex,vim,duplicates,Regex,Vim,Duplicates,假设我有一个包含多行的文件,比如 A.B C B.DAT E.F C F1.DAT 我想识别那些有重复项的行(例如B)。 但仅当副本后面跟着.DAT时 (注意,每个元素A、B、C……可以是任意长度) 因此,在前面的示例中,第一行应该返回匹配项,第二行不应该返回匹配项 我想继续删除重复项(即B.DAT),那么如何确保只匹配每行的第二个匹配项呢?此正则表达式应该满足您的要求(如果我理解您的意思…) 这意味着 \( 2: and "keep" it for later with `\
A.B C B.DAT
E.F C F1.DAT
我想识别那些有重复项的行(例如B)。
但仅当副本后面跟着.DAT时
(注意,每个元素A、B、C……可以是任意长度)
因此,在前面的示例中,第一行应该返回匹配项,第二行不应该返回匹配项
我想继续删除重复项(即B.DAT),那么如何确保只匹配每行的第二个匹配项呢?此正则表达式应该满足您的要求(如果我理解您的意思…) 这意味着
\( 2: and "keep" it for later with `\1`
. 1: get any character
\) 2:
.* 3: Match any number of characters ...
\zs 4: (and set the start of the matched region)
\1 5: ... followed by the kept character (step 2)
\.DAT 6: followed by .DAT
使用此正则表达式,您可以使用
%s/\(.\).*\zs\1\.DAT//
更新结果表明,副本可以由多个字符组成。在这种情况下,正则表达式变成
\(\S\+\).\zs\1\.DAT
。\S\+
现在可以匹配任意数量的非空白字符,正则表达式的其余部分是相同的。我认为上面的解释会非常有用。它可以完成这项工作,但也许我应该添加“B”可以是任意长度,所以目前它只匹配一个字符+.dat。
%s/\(.\).*\zs\1\.DAT//