我的列表中的行有时与第一个“空格”字符相似,然后可以更改(即之后的日期)。
wsmith jul/12/12
bwillis jul/13/13
wsmith jul/14/12
tcruise jul/12/12
我可以轻松地对这些行进行排序,但我希望删除重复的日期条目。我确实找到了一个正则表达式的建议,但它只匹配完全相同的行。我需要能够在文件中标记整行的类似用户名。在上面的示例中,第1行和第3行将突出显示。
(为清晰起见而编辑)
答案 0 :(得分:3)
PCRE
引擎(由Notepad ++使用)中的紧凑公式,以查看是否有从一行到另一行的重复将是
(?m)^(\S+).*\R(?s).*?\K\1
这适用于N ++。
当您删除重复的行时,可能会标记更多行,因为最初正则表达式会跳过中间行以突出显示副本。
<强>解释强>
(?m)
启用了多行模式,允许^
和$
在每一行匹配^
锚点断言我们位于字符串的开头(\S+)
捕获非空间字符到第1组.*
到达行尾\R
换行(?s)
激活DOTALL
模式,允许点跨行匹配.*?
懒洋洋地匹配字符...... \K
告诉引擎放弃与其返回的最终匹配项目匹配的内容\1
反向引用:匹配之前捕获的第1组。答案 1 :(得分:2)
我提出这个正则表达式:
^(\S+) (?=(?s:.)*\1.*).*
它将标记第一批有重复的用户。
^ # Beginning of line
(\S+) # Match and store non-spaces
# One space
(?= # Positive look-ahead begin
(?s:.)* # Match any character including newlines
\1.* # Match the matched group (i.e. the username) and anything following on same line
) # End lookahead
.* # Match anything remaining on line (mainly for the first match)
如果notepad ++标记了所有捕获组,您可以使用它来突出显示所有重复项,包括最后一个:
^(\S+) (?=(?s:.)*(\1.*)).*
但不幸的是(至少对于v6.5.2),N ++没有标记捕获组。