从Perl

时间:2015-11-20 07:22:48

标签: regex string perl substring

我有一串字符,我想在字词之间的空格中分解,但子字符串之间的空格数不应超过4。
例如:字符串:
" Baicalein是一种特殊的脂氧合酶(LOX)抑制剂,具有抗炎和抗氧化作用。"
产生的子串应该看起来像 1. Baicalein,
2. Baicalein, 3. Baicalein,具体的
4. 黄芩素,一种特定的脂氧合酶 5.黄芩素,一种特异性脂氧合酶(LOX) 6. a
7. 特定的 ... ... 我觉得Regex必须有一些方法,但我不确定

修改

我使用过的代码:

my @arr = split('\s', $line);
for(my $i=0; $i<$#arr; $i++)
{
my $str1 = $arr[$i];
my $str2 = $arr[$i].' '.$arr[$i+1];
my $str3 = $arr[$i].' '.$arr[$i+1].' '.$arr[$i+2];
my $str4 = $arr[$i].' '.$arr[$i+1].' '.$arr[$i+2].' '.$arr[$i+3];
}

我有很长的字符串,通过这种方法需要花费很多时间 在此先感谢

1 个答案:

答案 0 :(得分:0)

您可以创建一个内部循环以避免重复的代码。此外,使用点运算符反复粘贴内容效率较低。

my @substrings;
for (my $i=0; $i<=$#arr; ++$i)
{
    for (my $j=0; $j<5 && $i+$j<=$#arr; ++$j)
    {
        push @substrings, join(' ', @arr[$i..$i+$j]);
    }
}

您会注意到额外的边界条件,以防止内部循环超出输入数组的末尾,并使用新数组@substrings来包含结果。最后,看看缩进如何帮助您了解其中的内容。