在Perl中解析文件

时间:2015-03-09 08:59:11

标签: regex perl

我正在尝试以下列格式解析文件。

Case1: 0x5sdf258:648s4df ..;. ABCD hhbdch ; extra text 
Case2: 0xdef58e1:18w4we1 .... HCDC ajdknlmk ;extra text

我想在分号后删除额外的文本,所以我使用以下行

   $row =~ s/;.*//g;

这适用于案例2但在案例1中失败。是否有一种方法可以在两种情况下执行我的任务?

2 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

$row =~ s/;[^;]*$//g;

OR

$row =~ s/;[^;\n]*$//g;

这将删除最后一个分号后的文本(包括分号)。

DEMO

  • [^;]*否定了与任何charcater但不匹配;的字符类,零次或多次。

  • $声称我们已经结束了。

<强>代码:

use strict;
use warnings;

while(my $line = <DATA>) {
    $line =~ s/;[^;]*$//g;
    print $line."\n";
}


__DATA__
Case1: 0x5sdf258:648s4df ..;. ABCD hhbdch ; extra text 
Case2: 0xdef58e1:18w4we1 .... HCDC ajdknlmk ;extra text

<强>输出:

Case1: 0x5sdf258:648s4df ..;. ABCD hhbdch 
Case2: 0xdef58e1:18w4we1 .... HCDC ajdknlmk

答案 1 :(得分:0)

;(?!.*;).*

试试这个。看看演示。

https://regex101.com/r/eS7gD7/30