假设我有2个字符串。
$file1_out="astra.abs ::nerve : Costa.br_.cotAlev.ksaf.large.props.fault_check"
$file2_out="astra.abs ::nerve : Costa.br_.cotBlev.ksaf.large.props.fault_check"
你可以看到唯一的区别是cotAlev&中的A和B. cotBlev在2个字符串中。我想比较它们并获得2个新变量
$part1="astra.abs ::nerve : Costa.br_."
$part2=".ksaf.large.props.fault_check"
$var="cot_lev" ###removed the mismatching character
这是直到第一个不相等的单词并分成3个。如何在PERL中使用正则表达式
我是perl的新手,并在这里使用C中常见的循环概念来解决这个问题。我通过将字符串分成字符来比较每个字符串然后将它们组合成3个变量来实现这一点。但有人告诉我,有更简单的方法可以做到这一点。有很多比较要做,所以速度很重要......
答案 0 :(得分:1)
看看Text::Diff,它可能会做你尝试做的事情。
答案 1 :(得分:1)
我不确定如何用正则表达式处理这个问题。你说你用C循环来处理这个问题。你可以在Perl中做类似的事情。
my @file1_chars = split //, $file1_out;
my @file2_chars = split //, $file2_out;
这会将您的字符串拆分为一个数组,数组中的每个条目都是一个单独的字符。现在你可以循环直到找到你第一个不匹配的角色:
my $first_mismatched;
for my $char_num ( (0..$#file1_chars) ) {
if ( $file1_chars[$char_num] ne $file2_chars[$char_num] ) {
$first_mismatched = $char_num;
}
}
if ( defined $first_mismatched ) {
say "The two strings stop matching on character # $first_mismatched";
}
这将打印出来:
The two strings stop matching on character # 34
$#file1_chars
是@file1_chars
的最后一个数组索引。 (0..$#file1_chars)
索引从第一个索引条目到最后一个索引条目@file1_chars
。
您可以将其反转为从最后一个字符转到第一个字符:
my $last_mismatched;
for my $char_num ( reverse (0..$#file1_chars) ) {
if ( $file1_chars[$char_num] ne $file2_chars[$char_num] ) {
$last_mismatched = $char_num;
}
}
if ( defined $last_mismatched ) {
say "The two strings restart matching on character # $first_mismatched";
}