如何在Perl中提取字符串的一部分?

时间:2014-03-04 06:44:10

标签: regex perl

我的输入文件包含如下数据:

X-X-D-X-X-A 
X-D-X-A-X
D-X-X-X-X-A-X-X

我需要结果只给我

D-X-X-A
D-X-A
D-X-X-X-X-A

请帮助我!!

3 个答案:

答案 0 :(得分:2)

你可以尝试,

open my $fh, "<", "file" or die $!;
while (my $line = <$fh>) {
  $line =~ s/^[-X]+ | [-X]+(?=\s*$)//xg;
  print $line;
}
close $fh;

或来自cmd行,

perl -pe 's/^[-X]+ | [-X]+(?=\s*$)//xg' file

答案 1 :(得分:2)

经过测试的代码:

my @a = qw[
  X-X-D-X-X-A 
  X-D-X-A-X
  D-X-X-X-X-A-X-X
];

for my $a (@a) {
  if ($a =~ /(D[-X]+A)/) {
    print $1,"\n";
  }
}

答案 2 :(得分:0)

perl -lne 'print $1 if(/[^D]*(D.*A).*/)'

test

读取文件时在脚本内部

while (my $line = <$fh>) {
  $line =~ m/[^D]*(D.*A).*/g;
  print $1;
}

正则表达式:

[^D]*(D.*A).*

  1. [^D]*行不得以D
  2. 开头
  3. (D.*A)捕捉(圆括号)从D到最后A的盯着 线。捕获的部分将存储在$ 1
  4. .*在字符串中留下了字符串。