正则表达式用于查找不连续的重复单词(即在字符串中出现多次)

您所在的位置:网站首页 正则表达式匹配重复字母的单词 正则表达式用于查找不连续的重复单词(即在字符串中出现多次)

正则表达式用于查找不连续的重复单词(即在字符串中出现多次)

2024-07-11 08:11| 来源: 网络整理| 查看: 265

使用正则表达式完成关键部分的一种方法是使用允许在正则表达式中执行代码的功能,以构建频率散列(映射、字典)。然后可以用来选择重复的单词。

仅用正则表达式完成所有这些工作,而不使用任何语言或工具,实际上是不可能的(除非使用递归(如果支持))。这篇文章的其余部分将在regex特性的上下文中介绍编程语言的基础知识,该特性允许在regex中执行代码。

我认为大多数引擎都可以使用的一个功能是运行代码以准备替换字符串。我将Perl用于以下简短示例。这里有趣的是使用副作用完成的,这当然不是最优的(通常会导致看起来很笨拙的代码)。

或者运行常规替换并放回匹配的单词

代码语言:javascript复制$string =~ s/(\w+)/++$freq{$1}; $1/eg;

或者使用“非破坏性”替换,它不会更改目标(如果匹配失败,则返回更改后的字符串或原始字符串)。

代码语言:javascript复制my $toss = $string =~ s/(\w+)/++$freq{$1}/egr;

所述任务不需要返回的字符串。在这两种情况下,我们都会在每个单词上运行一个替换,而这并不是我们真正需要的。

然后打印频率大于1的键(词)

代码语言:javascript复制foreach my $word (keys %freq) { say $word if $freq{$word} > 1 }

正则表达式匹配“word”per

字符类;根据您的需要进行调整。

总之,由于这对于正则表达式来说是一项棘手的任务,我建议使用语言的特性将字符串拆分成单词并计算重复项,而不是推送正则表达式。任何称职的语言都可以优雅而高效地做到这一点。

对于Perl,另一种方法是使用

嵌入式代码构造

,它允许代码在匹配的部分中运行。据我所知,这在其他语言中是不可用的,除了一些库。

可以在匹配部分中运行代码,如下所示

代码语言:javascript复制my @matches = $string =~ /(\w+)(?{++$freq{$1}})/g;

其中构造

将执行嵌入式代码,在这里构建频率散列。使用此功能(安全)需要仔细阅读文档。

The The The

上面有

全部

在这里,它用于将正则表达式的匹配运算符放在“列表上下文”中,以便通过

修饰符。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3