如何分割多个不同的字符,同时保留该字符,但又不在空白处?

问题描述 投票:0回答:1

尝试/失败分割为 2 个不同的字符,但也在空间上。

#!/usr/bin/env perl
use strict;

my $line = "-abc=123 +def=456 -ghi 789";
my @arr = split(/([+-]\S+)/,$line);
foreach my $elem (@arr) {
    print "<${elem}>\n";  # '<' and '>' added to show where spaces are
}

exit;

这会产生...

<>
<-abc=123>
< >
<+def=456>
< >
<-ghi>
< 789>

我想要...

<-abc=123 >
<+def=456 >
<-ghi 789 >

(或者最好没有那些尾随空格,但很容易修剪)

它似乎想要在空间上进行分割,即使它不在正则表达式中。 我想我可以强力执行此操作,遍历数组并删除只是空格的元素。但希望有更优雅的东西!

regex perl
1个回答
0
投票

将您的代码更改为类似这样的内容

#!/usr/bin/env perl
use strict;

my $line = "-abc=123 +def=456 -ghi 789";
my @arr = split(/([+-]\S+\s*\S*)/, $line);
foreach my $elem (@arr) {
    next unless $elem =~ /\S/;  # Skip empty elements
    print "<${elem}>\n";
}

exit;

新的正则表达式

([+-]\S+\s*\S*)
捕获一个加号或减号,后跟一个或多个非空白字符
(\S+)
,后跟可选空白
(\s*)
,然后是更多非空白字符
(\S*)

© www.soinside.com 2019 - 2024. All rights reserved.