繁体   English   中英

Perl中的文件解析

[英]File parsing in Perl

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

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

我想在分号后删除多余的文本,因此我使用以下行

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

这在情况2下有效,但在情况1下失败。在两种情况下都可以执行我的任务的方法吗?

好像您想要这样的东西,

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

要么

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

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

DEMO

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

  • $断言我们已经结束了。

码:

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
;(?!.*;).*

试试看。看演示。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM