实际上我使用一个perl脚本为我的构建准备Readme txt。在我使用的脚本中
foreach $line (<LOG>)
{
if(length(trim($line))>0)
{
$line=trim($line);
$line=~ s/[\r]//gs;
if(rindex($line,'#')!=-1)
{
$icut=substr($line,0,index($line,']'));
$icut2=substr($icut,index($icut,'#')+1,length($icut));
}
push(@issue,$icut2);
它正在提取正确的问题但是当情况出现时
[I#1303350], [I#1270918],[I#1312521] Updated Physical Confirmation Template based on CO
然后它只提取一个问题并非所有问题都是同一行。所以我修改了我的代码,如
foreach $revno(<REV>)
{
if(length(trim($revno))>0)
{
$revno=trim($revno);
$revno=~ s/[\r]//gs;
if(rindex($revno,'#')!=-1)
{
$revcut=substr($revno,0,rindex($revno,']'));
print "$revcut\n";
$revcut1=substr($revcut,index($revcut,'#')+1,length($revcut));
}
}
push(@issue,$revcut1);
现在它获取所有修订版本号但是输出类似于1312588,1303350], [I#1270918],[I#1312521
但我想仅删除#
[
]
I
但不删除{{ 1}}请告诉我如何通过正则表达式解析它。
答案 0 :(得分:1)
这可以在没有正则表达式的情况下完成:Transliterate: tr///
use warnings;
use strict;
my $s = '1312588,1303350], [I#1270918],[I#1312521';
$s =~ tr/ ][#I//d;
print "$s\n";
__END__
1312588,1303350,1270918,1312521
答案 1 :(得分:1)
你可以这样做:
echo "[I#1303350], [I#1270918],[I#1312521]" | perl -lnwe "print for m/#(\d+)/g"
答案 2 :(得分:0)
这对我有用:
my @issues = $line_of_data =~ m/#(\d+)/g;
如果你想要逗号,那么这样做要容易得多:
my $with_commas = join( ', ', @issues );
你仍然将个别问题编号作为数据的“原子”。