В Perl вы можете создавать регулярные выражения внутри вашей программы, используя строки. Вот некоторый пример код:
#!/usr/bin/perl
use strict;
use warnings;
my @strings = (
"l.l.c",
"llc",
"LLC",
"lLc",
"l,l,c",
"L . L C ",
"l W c"
);
my @seps = ('.',',','\s');
my $sep_regex = '[' . join('', @seps) . ']*';
my $regex_def = join '', (
'[lL]',
$sep_regex,
'[lL]',
$sep_regex,
'[cC]'
);
print "definition: $regex_def\n";
foreach my $str (@strings) {
if ($str =~ /$regex_def/) {
print "$str matches\n";
} else {
print "$str doesn't match\n";
}
}
Это регулярное выражение также может быть упрощен с помощью регистронезависимого соответствия (что означает $ совпадения = ~/$ регулярное выражение/я). Если вы запускаете это несколько раз в строках, которые вы определяете, вы можете легко увидеть случаи, которые не проверяются в соответствии с вашим регулярным выражением. Создание регулярного выражения таким образом может быть полезно только для определения символов разделителя один раз, и я думаю, что люди, вероятно, будут использовать одни и те же разделители для самых разных сокращений (например, IRS, I.R.S, irs и т. Д.).
Вы также можете подумать о поиске в алгоритмах approximate string matching, которые популярны в большом количестве областей. Идея заключается в том, что вы определяете систему подсчета очков для сравнения строк, а затем можете измерить, как аналогичные строки ввода соответствуют вашей канонической строке, чтобы вы могли распознать, что «LLC» и «lLc» - очень похожие строки.
В качестве альтернативы, поскольку другие люди предложили вам написать входной дезинфицирующее средство, которое удаляет нежелательные символы, такие как пробелы, запятые и периоды. В контексте вышеупомянутой программы, вы можете сделать это:
my $sep_regex = '[' . join('', @seps) . ']*';
foreach my $str (@strings) {
my $copy = $str;
$copy =~ s/$sep_regex//g;
$copy = lc $copy;
print "$str -> $copy\n";
}
Если у вас есть контроль, как данные вводятся первоначально, вы могли бы использовать такие дезинфицирующее для проверки вводимых данных от пользователей и других программ, которые будет сделать ваш анализ намного проще.
Вы можете создать массив регулярных выражений, по одному для каждого возможного суффикса, и пройти через них. Это было бы относительно читаемо, но все же немного сложно поддерживать. –