使用正则表达式替换字符串中字符的最后一个实例

时间:2010-01-22 04:30:00

标签: regex

我有一个包含这样数据的csv文件

Zoos, Sanctuaries & Animal Parks,7469,3.00

不幸的是,这不正确,因为第一部分应该是像这样的所有一个字段

"Zoos, Sanctuaries & Animal Parks","7469","3.00"

由于这只是一次性导入,我很乐意将其转换为

Zoos, Sanctuaries & Animal Parks|7469|3.00

将最后一个和后一个最后一个逗号转换为管道。使用正则表达式有一种简单的方法吗?

5 个答案:

答案 0 :(得分:2)

要将逗号转换为管道最后2项,您可以这样做

>>> re.sub(",(\d+),([\d.]+)$","|\\1|\\2","Zoos, Sanctuaries & Animal Parks,7469,3.00")
'Zoos, Sanctuaries & Animal Parks|7469|3.00'

答案 1 :(得分:1)

这样的事情应该有效:

s/(\S),(\S)/\1|\2/g

(用管道替换所有用空格字符包围的逗号。)

答案 2 :(得分:1)

您可以通过这种方式转换为管道。只需通过此命令提供文字:

sed 's/,\([^,]*\),\([^,]*\)$/|\1|\2/'

答案 3 :(得分:1)

$ cat test.csv 
Zoos, Sanctuaries & Animal Parks,7469,3.00
a,100,2000
a,b and c, 100,300

$ cat test.csv | perl -npe 's/^(.*),(.*),(.*)$/$1|$2|$3/'
Zoos, Sanctuaries & Animal Parks|7469|3.00
a|100|2000
a,b and c| 100|300

答案 4 :(得分:0)

将最后一个逗号转换为管道:

^(.*?),([^,]*?),([^,]*?)$替换为$1|$2|$3

甚至更好 - 将它们转换为正确的格式:

^(.*?),([^,]*?),([^,]*?)$替换为"$1","$2","$3"