.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
) 中实际发现的重复数字也将被匹配。
所以这需要进一步专业化,因为我们需要了解数据。
我有大量 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
) 中实际发现的重复数字也将被匹配。
所以这需要进一步专业化,因为我们需要了解数据。