.NET 正则表达式(类似 perl),用于检测连续粘贴两次的文本

.NET Regular Expression (perl-like) for detecting text that was pasted twice in a row

我有大量 json 文件,由于制作它们的程序存在 UI 错误,经常会有连续两次不小心粘贴的文本(没有 space 分开他们)。

示例:{FolderLoc = "C:\testC:\test"}

我想知道正则表达式是否可以匹配这个。这将是每行。如果我能做到这一点,我可以使用 FNR,这是一个支持 .NET RegEx 的文本批处理工具,来消除意外的重复。

我很遗憾没有展示我的一个尝试的例子,但这是一个非常独特的问题,我无法在搜索引擎上找到任何类似的东西,甚至无法开始作为解决方案的基础。

如有任何帮助,我们将不胜感激。

可以沿字符串收集文本(.+ 样式),然后进行前瞻性检查以检查到那时为止已捕获的内容,那么它的重复是什么,例如

/(.+)(?=)/;  # but need more restrictions

然而,即使在双 leTTer 上也会被触发,所以它至少需要多一点。例如,我们的模式可能要求重复的文本至少有两个词长。

这是一个基本的原始示例。另请参阅最后关于正则表达式的注释。

use warnings;
use strict;
use feature 'say';

my @lines = (
    q(It just wasn't able just wasn't able no matter how hard it tried.),
    q(This has no repetitions.),
    q({FolderLoc = "C:\testC:\test"}),
);

my $re_rep = qr/(\w+\W+\w+.+)(?=)/;  # at least two words, and then some

for (@lines) { 
    if (/$re_rep/) {
        # Other conditions/filtering on  (the capture) ?
        say 
    } 
}

这至少匹配两个词:word (\w+) + non-word-chars + word + anything。这仍然会获得一些合法数据,但这是一个开始,现在可以根据您的数据进行定制。我们可以调整正则表达式 and/or 进一步检查我们在 if 分支内的捕获。

该模式不允许任何中间文本(重复必须紧随其后),如果需要可以轻松更改;问题是一些合法的重复是否会被标记出来。

上面的程序打印

just wasn't able 
C:\test

关于正则表达式的注释 这个寻找重复文本的任务太笼统了 就目前而言,它肯定会选择某人的好数据。需要注意的是,我必须至少要求 两个 个单词(其中一个单词 that that 被标记),这是任意的,但仍然不够。其一,在数据文件 (3,3,3,3,3) 中实际发现的重复数字也将被匹配。

所以这需要进一步专业化,因为我们需要了解数据。