gpt4 book ai didi

regex - 如何按字母顺序搜索包含字母的六个字母的单词

转载 作者:行者123 更新时间:2023-12-01 07:27:54 24 4
gpt4 key购买 nike

我最近创建了一个 Perl 脚本,它使用以下代码搜索以 D 和 E 开头的单词:

$infile = 'words.txt';
open(IN, $infile);
$count = 0;
while ($word = <IN>) {
chomp($word);
if ($word =~ /^d\w*e$/i) {
print "$word\n";
$count++;
}
}
print "$count\n";

我最近决定 fork 代码并创建一个脚本来搜索一个由六个字母组成的单词,并且单词中的字母按字母顺序(A 到 Z)。而不是使用 word.txt , 我打算使用位于 的 Unix 标准字典。 usr/share/dict/words .如何通过修改此代码来完成此操作?

最佳答案

看起来您真正需要的是一种算法,用于检查给定单词中的字母是否按字母顺序排列。有几种方法,但这个子程序的工作方式是将单词拆分为其组成字符的列表,对该列表进行排序并重新组合。如果结果与原始单词匹配,则该单词已经排序。

use strict;
use warnings;

use feature 'fc';

for (qw/ a ab ba cab alt effort toffee /) {
print "$_\n" if in_alpha_order($_);
}

sub in_alpha_order {
my $word = fc(shift);
my $new = join '', sort $word =~ /./g;
return $new eq $word;
}

输出
a
ab
alt
effort

如果你真的想在正则表达式中做到这一点,你可以构建一个像
a(?=[a-z]) | b(?=[b-z]) | c(?=[c-z]) ...

这是一个以这种方式工作的程序。它的输出与上面的相同。
use strict;
use warnings;

my $regex = join '|', map "${_}(?=[$_-z])", 'a'..'z';
$regex = qr/^(?:$regex)*.$/i;

for (qw/ a ab ba cab alt effort toffee /) {
print "$_\n" if $_ =~ $regex;
}

关于regex - 如何按字母顺序搜索包含字母的六个字母的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com