我有
之类的CSV文字1,2,3,{4,5,6,7,8},9,10,100
我想替换{}
之间字段的分隔符。该文本应如下所示:
1,2,3,{4|5|6|7|8},9,10,100
我尝试了perl -0777 -pe 's/\{.*?,\}/|/g'
但没有任何反应。我该怎么做呢?
答案 0 :(得分:2)
这会按照你的要求行事。它将替换所有后跟一系列字符的逗号,这些字符 not 大括号{
}
,然后是右括号
use strict;
use warnings;
use 5.010;
my $s = '1,2,3,{4,5,6,7,8},9,10,100';
$s =~ s/,(?=[^{}]*\})/|/g;
say $s;
<强>输出强>
1,2,3,{4|5|6|7|8},9,10,100
答案 1 :(得分:0)
您可以将以下正则表达式与var a = document.querySelector('a');
console.log(a.href);
替换字符串一起使用:
$1$2|
输出:
(\{\s*|(?<!^)\G)(\d+),(?=[,0-9]*\})
1,2,3,{4|5|6|7|8},9,10,100
答案 2 :(得分:0)
这是Perl 5.14及更高版本的命令行版本。
perl -pe 's/([{][\d,]+[}])/$1 =~ s~,~|~gr/ge'
/e
表示它将替换作为Perl表达式而非标准正则表达式进行评估。这意味着它将获取第一次捕获($1
)的值并使用返回(/r
)执行替换,以避免尝试修改读取时出错 - 仅值($1
)。
答案 3 :(得分:-1)
你可以试试这个:
$st = "1,2,3,{4,5,6,7,8},9,10,100";
if ( $st=~/\{(.*)\}/ ) {
$tr = $1;
$tr =~ s/,/|/g;
$st =~ s/\{*\}/{$tr}/;
print "$st \n"
}
输出:
1,2,3,{4,5,6,7,8{4|5|6|7|8},9,10,100