对于以下内容,有没有更简洁/更通俗的方式:
my @components = split /-/, $original;
my $final_string = $components[0]."-".$components[1]; 输入的字符串最多包含2个-,最后一个是可选的。我总是想保留第一部分。也就是说,10-9-1应该变成10-9和10-9,因为输入应该保持10-9
发布于 2018-11-27 19:04:39
use Modern::Perl;
my $re = qr/-\d+\K.*$/;
while(<DATA>) {
chomp;
s/$re//;
say;
}
__DATA__
10-9-1
10-9对于一个字符串:
my $original = '10-9-1';
(my $final = $original) =~ s/-\d+\K.*$//;
say $final;说明:
s/
- # find the first dash in the string
\d+ # 1 or more digits
\K # forget all we have seen until this posiiton
.* # rest of the line
$ # end of line
//发布于 2018-11-27 19:19:12
在这里使用正则表达式匹配更容易。
my ($final_string) = $original =~ /^([^-]*-[^-]*)/;如果您想在适当的位置进行更改,则替换效果很好。
$original =~ s/^[^-]*-[^-]*\K.*//s;发布于 2018-11-27 19:12:03
$original =~ m/^([^\-]+\-[^\-]+)/ or warn "Unable to match regex in string: $original";
my $final_string = $1;我想这将会回答你的问题。它不受任何特定字符串的限制-比如连字符后面的文本应该是一个数字或任何东西。如果它也不匹配,它会警告你。
这是假设$original变量只有一个要匹配的实例(从问题中的代码推断)。
https://stackoverflow.com/questions/53497966
复制相似问题