-1

这是我的表达:

((.)*(,)){2}

这是输入:

1231,3453453,ewrtewrt,wertwe,rwewer,werewrwe

我想要的预期输出是:

1231,3453453,
ewrtewrt,wertwe,
rwewer,werewrwe
4

4 回答 4

5

而不是正则表达式,您应该只用逗号(或任何您预期的分隔符)分隔。然后遍历项目并每两个项目添加换行符。

于 2013-02-08T17:07:03.640 回答
2
=$ perl -e 'my $q = q{1231,3453453,ewrtewrt,wertwe,rwewer,werewrwe}; $q =~ s/((?:[^,]*,){2})/$1\n/g; print $q'
1231,3453453,
ewrtewrt,wertwe,
rwewer,werewrwe

那就是正则表达式是:

s/((?:[^,]*,){2})/$1\n/g
于 2013-02-08T17:10:17.157 回答
2

这是一个计算逗号并在每隔一个处插入换行符的解决方案:

perl -plwe's/,\K/++$i % 2 || "\n"/eg'

也就是说,找到一个逗号,保留它 ( \K) 并插入一个评估字符串。迭代器$i将是每隔一个逗号,所以表达式返回一个换行符,否则什么都没有。正则表达式是:

s/,\K/++$i % 2 || "\n"/eg

它确实需要一个计数变量,这可能是一个缺点。

于 2013-02-08T17:41:53.967 回答
1
s/(,[^,]*,)/$1\n/g

在这里测试

于 2013-02-08T18:07:21.440 回答