Perl如何取指定字符之前的字符
$Data=BRD1_EC2=3.887607(389.999986M,5)R=nail=2,17value=0ohmPN=ZNO30V4.2JCMS1812*TOP问题...
$Data=BRD1_EC2=3.887607(389.999986M,5)R =nail=2,17 value=0ohm PN=ZNO30V4.2JCMS1812 * TOP
问题: 如何取"_"和最近的"="之间的所有的字符,EC2是个变量.
分值不够,下次补给你 展开
问题: 如何取"_"和最近的"="之间的所有的字符,EC2是个变量.
分值不够,下次补给你 展开
2个回答
展开全部
取指定字符之前的字符的方法是:
perl -nle 'if(/^start:/ or /^end:/){ # 匹配 flag
/([^:]+:)(.*)?\(?/; # 正则捕获$1,$2,其中$1是start: 或 end:,$2是'('之前的部分
if($1 eq "start:"){push @{$hash{$1}},$2;$s=$2;} # 如果$1是start:的话,存入key为$1,值为$2的hash中,另外,再保留一份$2给临时变量$s,
else{$hash{$s} = $1.$2} # 如果$1不是start:,即是end:, 则存入key为$s,值为$1.$2到hash中
};
END{
use Data::Dumper;
print Dumper \%hash; # 可以看下hash的结构是什么,应该会理解下面foreach的block部分
foreach (sort {$a cmp $b} @{$hash{"start:"}}){
print "start: ",$_,"\t",$hash{$_}
}
}' file
perl -nle 'if(/^start:/ or /^end:/){ # 匹配 flag
/([^:]+:)(.*)?\(?/; # 正则捕获$1,$2,其中$1是start: 或 end:,$2是'('之前的部分
if($1 eq "start:"){push @{$hash{$1}},$2;$s=$2;} # 如果$1是start:的话,存入key为$1,值为$2的hash中,另外,再保留一份$2给临时变量$s,
else{$hash{$s} = $1.$2} # 如果$1不是start:,即是end:, 则存入key为$s,值为$1.$2到hash中
};
END{
use Data::Dumper;
print Dumper \%hash; # 可以看下hash的结构是什么,应该会理解下面foreach的block部分
foreach (sort {$a cmp $b} @{$hash{"start:"}}){
print "start: ",$_,"\t",$hash{$_}
}
}' file
展开全部
方法有三种,一般可以使用字符串搜索找到位置,然后获取子串,方法二是模式匹配,我说说方法三,使用split,例如你的例子:
$Data='BRD1_EC2=3.887607(389.999986M,5)R =nail=2,17 value=0ohm PN=ZNO30V4.2JCMS1812 * TOP';
($s1,$s2)=split($Data,'_');
($s1)=split($s2,'=');
print $s1;
$Data='BRD1_EC2=3.887607(389.999986M,5)R =nail=2,17 value=0ohm PN=ZNO30V4.2JCMS1812 * TOP';
($s1,$s2)=split($Data,'_');
($s1)=split($s2,'=');
print $s1;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询