【问题标题】:How can I print lines that match the pattern that I need in Perl如何在 Perl 中打印与我需要的模式匹配的行
【发布时间】:2015-12-15 06:41:05
【问题描述】:

我对这个话题有一些疑问:

How can I print lines after a regex match in Perl?

我正在使用源代码并将正则表达式从数据修改为 (F)。

但是当我跑的时候,那些有F的线也会被捡起来。虽然我已经将正则表达式更改为 (F)。谁能帮我解决这个问题?

这是我的数据(输入文件):

 Device#1
 00  000  000 000  1 > beta (F)
 Device#2
 00  000  000 1  000 > beta (F)
 Fail
 Device#3
 00  000  1 000  000 > beta (F)
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

我使用的代码是:

my $directory = 'C:\Users\Try';
my $motif = '(F)';

parse($motif);

sub parse{
my ($x) = (@_);  #$x=(F)
print "$x\n";
while(<INPUT>)
{
    if($_ =~ />*($x)/)

        {
        print $_."\n";
        $printable = 1;
        }
    else
        {
      #   print "ELSE\n";
        }
     #   print "FINISH 1 loop\n";
}
}

我希望得到的结果:

 00  000  000 000  1 > beta (F)
 00  000  000 1  000 > beta (F)
 00  000  1 000  000 > beta (F)
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

我得到的当前输出如下:

 00  000  000 000  1 > beta (F)
 00  000  000 1  000 > beta (F)
 00  000  1 000  000 > beta (F)
 Fail
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

【问题讨论】:

  • 你得到了什么结果?
  • 嗨 Jens,我得到了结果 00 000 000 000 1 > beta (F) 00 000 000 1 000 > beta (F) 00 000 1 000 000 > beta (F) Fail 57020 0 Main LDO VOUT,IN = 3.5V,OUT = 200u 输出 3.480 V 3.480 V (F) 3.520 V 0.
  • 结果中有一个额外的失败行。这对我来说不是必需的。
  • 谁能教我解析的工作原理是什么?解析($motif);子解析{

标签: regex perl


【解决方案1】:

变化:

if($_ =~ />*($x)/)

if($_ =~ />+.*($x)/)

所以你只会在一行中得到 &gt;(F) 一行

解释:

>* mean zero or more `>` so also lines with only a F will be matched (parentheses are Special character in regex)
>+.* means  one or more `>` and after that can be Zero or more character.

【讨论】:

    【解决方案2】:

    你可以在你的匹配中使用word boundary\b,所以它不会匹配其他的东西。

    改变这个:

    if($_ =~ />*($x)/)
    

    if($_ =~ />*(\b$x\b)/)
    

    【讨论】:

    • @LeowCheesiang:很高兴它有帮助。
    • 有什么地方可以在 Perl 脚本上和你聊天?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多