0

我有一个包含两个字符值的列表,每个值在 Notepad++ 中各占一行。我正在尝试消除重复项,但我所写的只是匹配相隔一行的字符。

因此,如果我的列表如下所示:

ME, <- not matched
OR,   |
ME, <- not matched
RI,
IL,
SD,
NV,
VA,
VA,
NY,
MN,
IL,
CA,
MI,
MO, <- match
MO, <- match

现在我正在使用这个。我该如何修改它,以便它发现重复的结果也超过一行

((\w{2}).*(\r\n)(\2))+

编辑

((\w{2}).*(\r\n))(.*\r\n)+\1这似乎工作得更好一些

4

3 回答 3

0

如果您选中“点匹配换行符”复选框,您将获得三个匹配项:

ME, <-  matched
OR,   |
ME, <-  matched
RI,
IL, <-  matched
SD,   |
NV,   |
VA,   |
VA,   |
NY,   |
MN,   |
IL, <-  matched
CA,
MI,
MO, <- matched
MO, <- matched

但这不会帮助您删除重复项..

于 2013-09-16T20:27:03.237 回答
0

也许这不是首选的答案,但我会编写一个小的 python 脚本来完成这项任务......

my_file = """ME,
OR,
ME,
RI,
IL,
SD,
NV,
VA,
VA,
NY,
MN,
IL,""" #replace by my_file = file("filename.txt", "r")
my_set = set()
for line in my_file.splitlines():
    my_set.add(line)
print my_set #just for demonstartion
out_file = file("C:\\Users\\burgert\\Desktop\\outfile.txt", "w")
for s in my_set:
    s += "\n"
    out_file.writelines(s)
out_file.close()
于 2013-09-16T20:47:52.697 回答
0
(\w{2}),[^\1]*(\1),

正则表达式可视化

调试演示

我相信这是你能得到的最接近的。

编辑:我撒谎了,哈哈,这会奏效。 我不确定您使用的是什么语言,但我会给您伪代码。

本质上,

pattern = "(\w{2}),[^]*(\1),";
compile(pattern);
while(match(pattern, input)){
     //replace input's group 2 with a "" and remove /r/n
}

这将继续运行代码,直到您没有重复。

于 2013-09-16T20:37:53.257 回答