首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保留字符串的前2部分,并使用分隔符

保留字符串的前2部分,并使用分隔符
EN

Stack Overflow用户
提问于 2018-11-27 18:48:45
回答 4查看 101关注 0票数 3

对于以下内容,有没有更简洁/更通俗的方式:

代码语言:javascript
复制
my @components = split /-/, $original;
my $final_string = $components[0]."-".$components[1];  

输入的字符串最多包含2个-,最后一个是可选的。我总是想保留第一部分。也就是说,10-9-1应该变成10-910-9,因为输入应该保持10-9

EN

回答 4

Stack Overflow用户

发布于 2018-11-27 19:04:39

代码语言:javascript
复制
use Modern::Perl;

my $re = qr/-\d+\K.*$/;
while(<DATA>) {
    chomp;
    s/$re//;
    say;
}
__DATA__
10-9-1
10-9

对于一个字符串:

代码语言:javascript
复制
my $original = '10-9-1';
(my $final = $original) =~ s/-\d+\K.*$//;
say $final;

说明:

代码语言:javascript
复制
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
//
票数 5
EN

Stack Overflow用户

发布于 2018-11-27 19:19:12

在这里使用正则表达式匹配更容易。

代码语言:javascript
复制
my ($final_string) = $original =~ /^([^-]*-[^-]*)/;

如果您想在适当的位置进行更改,则替换效果很好。

代码语言:javascript
复制
$original =~ s/^[^-]*-[^-]*\K.*//s;
票数 4
EN

Stack Overflow用户

发布于 2018-11-27 19:12:03

代码语言:javascript
复制
$original =~ m/^([^\-]+\-[^\-]+)/ or warn "Unable to match regex in string: $original";
my $final_string = $1;

我想这将会回答你的问题。它不受任何特定字符串的限制-比如连字符后面的文本应该是一个数字或任何东西。如果它也不匹配,它会警告你。

这是假设$original变量只有一个要匹配的实例(从问题中的代码推断)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53497966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档