正则表达式 - 替换csv列表中的第一个逗号和最后一个逗号,但保留中间的逗号

时间:2011-09-30 19:01:25

标签: regex

我是正则表达式的新手...但是这里有。

所以,假设我有这些数据。

13579,24680,13579,24680
13579,24680,13579,24680
13579,24680,13579,24680
13579,24680,13579,24680

所以我想要的是它替换第一个逗号,而最后一个逗号则没有。所以我最终得到了:

 1357924680,1357924680
 1357924680,1357924680
 1357924680,1357924680
 1357924680,1357924680

经过。

我在^([^,]+),

的某个地方想到了一个模式

但正如你所知,这不起作用。有什么建议或者我应该重新考虑我用来做这件事的事情吗?

5 个答案:

答案 0 :(得分:3)

尝试这样的事情:

regex: ^([^,]+),([^,]+),([^,]+),([^,]+)$
options: multiline
replace $1$2,$3$4

答案 1 :(得分:2)

这适用于perl:

$match =~ s/^(.*?),(.*),(.*?)$/$1$2$3/;

答案 2 :(得分:1)

尝试

^(\d+),(\d+),(\d+),(\d+)

替换为

$1$2,$3$4

here on Regexr

根据您访问文本的方式,您需要使用多线修改器。

答案 3 :(得分:1)

Ruby示例

"13579,24680,13579,24680".gsub(/(.*?),(.*),(.*?)/,'\1\2\3')
=> "1357924680,1357924680"

和另一个没有使用正则表达式的例子,因为它总是值得一试

"%s%s,%s%s" % "13579,24680,13579,24680".split(',')
=> "1357924680,1357924680"

答案 4 :(得分:0)

kent$  echo "13579,24680,13579,24680
"|sed -r 's#(^[0-9]+),(.*?),([0-9]+)$#\1\2\3#'
1357924680,1357924680