获得输出所需的循环有哪些变化?

时间:2016-11-19 08:04:39

标签: perl

我的文件标题格式以>开头字符。如果标题是这种格式:'> anything1 | anything2',我使用此脚本修剪标题并获取输出标题'> anything1'。

while (<>) {
    if (/^(>[^|]*)/) {
    print "$1\n";
    } else {
    print;
    }
}

但是现在,在我的文件中,一些标题大如下:

>anything1|anything2|anything3 bla bla bla /#

和一些标题如下:

>anything1

现在从单个文件中的这个混合标题类型,如果我想要一个输出修剪标题最多2个字符的较大标题(即&#39;&gt; anything1 | anything2&#39;对于上面的大标题)并为小标题保留一个字符(即&#39;&gt;&gt;只有上面的小标题),我应该在循环中做些什么改变?

由于

1 个答案:

答案 0 :(得分:1)

如何摆脱那个正则表达式

while (<>) 
{
    if (/^>/) 
    {
        my @fields = split '\|', $_;

        if (@fields <= 2) {  print $fields[0] }
        else              {  print join '|', @fields[0,1] }

        next;
    }

    print;
}

请考虑可能的边缘情况。有阵列时很容易。

使用正则表达式,可以单独匹配案例,或者仔细想出一个以某种方式将这两个案例捆绑到三个不同场景的案例,这将更加复杂。