【发布时间】:2011-03-21 09:28:39
【问题描述】:
我有一个字符串,范围从空字符串到逗号分隔数字的任意列表。例如:"1,2,3"
不幸的是,当我编写删除元素的代码时,我有一堆 if 语句——主要是处理它是列表中的第一个、最后一个还是唯一的元素。我一直在想一定有更好的方法!
例如,我需要能够删除以下列表中的元素“2”:
"1,2,3"
"1,3,2"
"2,1,3"
"2"
"12,2,21"
""
【问题讨论】:
我有一个字符串,范围从空字符串到逗号分隔数字的任意列表。例如:"1,2,3"
不幸的是,当我编写删除元素的代码时,我有一堆 if 语句——主要是处理它是列表中的第一个、最后一个还是唯一的元素。我一直在想一定有更好的方法!
例如,我需要能够删除以下列表中的元素“2”:
"1,2,3"
"1,3,2"
"2,1,3"
"2"
"12,2,21"
""
【问题讨论】:
这应该做你想做的:
/(\b|,)2(\b|,)/
【讨论】:
正在删除(请参阅下面的替换)
我找不到要删除的简单的单个表达式,所以似乎最好的办法就是按顺序匹配每个模式:
echo "x,x,1,x,2,x,x" | sed -e 's/,x,/,/g; s/^x,//; s/,x$//; s/^x$//'
有点冗长,但可读性很强。
更换
echo "x,x,1,x,2,x,x" | sed -e 's/,x,/,y,/g; s/^x,/y,/; s/,x$/,y/; s/^x$/y/'
【讨论】: