d:e, f, g "; 在这个字符串中可能有 空格 和/或 标签 我在 perl 中拆分字符串: my (@COLUMNS) =-6ren">
gpt4 book ai didi

regex - Perl - 在逗号上拆分字符串。忽略空格

转载 作者:行者123 更新时间:2023-12-01 07:35:54 26 4
gpt4 key购买 nike

我有这个字符串:

$str="     a, b,    c>d:e,  f,    g ";

在这个字符串中可能有 空格 和/或 标签

我在 perl 中拆分字符串:
my (@COLUMNS) = split(/[\s\t,]+/, $str));

但这会在位置 [0] 处创建一个前导空格。
@COLUMNS=[

a
b
c>d:e
f
g
]

我要这个:
@COLUMNS=[
a
b
c>d:e
f
g
]

最佳答案

我建议您使用全局正则表达式匹配来查找既不是逗号也不是空格的所有字符子序列

它将产生与您的 split(/[\s\t,]+/ 相同的输出. (注意 \t 是多余的,因为 \s 也匹配制表符。)但是会创建一个没有任何空元素的列表

use strict;
use warnings 'all';

my $str = " a, b, c>d:e, f, g ";

my @columns = $str =~ /[^\s,]+/g;

use Data::Dump;
dd \@columns;

输出

["a", "b", "c>d:e", "f", "g"]

请注意 ,就像您的拆分一样,此方法将忽略任何空字段:例如 a,,,b将返回 [ 'a', 'b' ]而不是 [ 'a', '', '', 'b' ] .此外,包含空格的列将被拆分,因此 a,two words,b将产生 [ 'a', 'two', 'words', 'b' ]而不是 [ 'a', 'two words', 'b' ] .只有你能判断这些情况是否有可能出现

如果这种方法有可能产生错误的结果,那么最好简单地用逗号分割并编写一个子程序来修剪结果字段

use strict; 
use warnings 'all';

sub trim(;$);

my $str=" a ,, ,two words ,,, b";
my @columns = map trim, split /,/, $str;

use Data::Dump;
dd \@columns;


sub trim(;$) {
(my $trimmed = $_[0] // $_) =~ s/\A\s+|\s+\z//g;
$trimmed;
}

输出

["a", "", "", "two words", "", "", "b"]

关于regex - Perl - 在逗号上拆分字符串。忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37748868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com