Notepad ++ RegEx:删除重复的行,这些重复的行仅从行的开头一直重复到特定字符

时间:2018-07-15 21:25:14

标签: regex duplicates notepad++

长话短说,我正在尝试通过创建一个简单的投票系统(该投票系统禁止一个人进行多次投票)来帮助《最终幻想XIV》吟游诗人表演社区。 Strawpoll很容易作弊。 ^^因此,我已经找到解决方法,但是我需要有关Notepad ++中RegEx函数的帮助。

我们需要检查选民何时多次投票,并删除所有多余的选票(而不是删除第一票)。因此,从文字上来说,从一行的开头到>>的所有内容都是我们要检查的重复项,而行中>>之后的部分在搜索中将被忽略。

那么这:

VoterName1 >> Thancred
VoterName1 >> Minfilia
VoterName1 >> Thancred
VoterName2 >> Wedge
VoterName3 >> Thancred
VoterName3 >> Wedge
VoterName4 >> Biggs

看起来像这样:

VoterName1 >> Thancred
VoterName2 >> Wedge
VoterName3 >> Thancred
VoterName4 >> Biggs

我试图通过结合自己在网上看到的东西和摆弄的东西并尝试学习RegEx来自己找到解决方案,但是编程思维(或任何可能的称呼)并不是我的专长。无论如何,非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用记事本++进行测试

搜索:

  • 如果用户名可以有空格:^((.+) >>.+)(\r?\n\2 .+)+
  • 如果用户名不能包含空格:^((\S++).+)(\r?\n\2 .+)+

替换为:\1

它匹配第一个投票者(第2组),然后在以该名字开头的行中引用它。您匹配所有这些行,并用第一个捕获组(整个第一行)替换它们

此外,在记事本++中,\n 不匹配\r\n不匹配,因此,在搜索\r时,您通常想添加一个额外的\n

答案 1 :(得分:0)

您可以使用

^(.+) >> (.+)(\n\1.+)+

替换为

$1 >> $2

输出:

VoterName1 >> Thancred
VoterName2 >> Wedge
VoterName3 >> Thancred
VoterName4 >> Biggs

它捕获选民名称和第一个投票的字符,然后通过反向引用匹配具有相同选民名称的后续行,并将其全部替换为(单行)选民名称和第一个投票的字符。

https://regex101.com/r/8pX4z4/1