2010-07-27 23 views
2

我有一個字符串,可以從空字符串到逗號分隔數字的任意列表。例如:"1,2,3"是否有單個正則表達式替換分隔列表中的數字?

不幸的是,當我編寫刪除元素的代碼時,我有一堆if語句 - 主要是爲了處理它是列表中的第一個,最後一個還是唯一的元素。我一直認爲必須有更好的方式!

例如,我需要能夠移除元素 '2' 在以下列表:

"1,2,3" 
"1,3,2" 
"2,1,3" 
"2" 
"12,2,21" 
"" 

回答

1

這應該做你想要什麼:

/(\b|,)2(\b|,)/ 
+0

唉唉我忘了\灣這正是我正在尋找的,謝謝! – Zugwalt 2010-07-27 02:30:14

+0

如果2在中間,這將刪除之前的逗號和之後的逗號。例如:echo「1,2,3」| sed -e's/\\(\ b,\\)2 \(\ b,\\)//'給你:「13」但應該給你「1,3」 – JasonWoof 2012-02-03 19:09:58

0

刪除(請參閱下面的替換)

我找不到一個簡單的單一表達式去除,所以它似乎最好的東西只是按順序匹配每個圖案:

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/'