我正在尋找一種方式,將整數和連字符串中的任何單個數字與0相加。用正則表達式匹配並替換一個數字?
「-0-2-3 --- --- 12-0 10-」 變得 「-00-02-03 --- --- 12-00 10」
或
「-12-14-7-8-」 變得 「-12-13-07-08-」
我使用\ d試圖{1}以破折號,但它的組合似乎沒有捕獲所有正確的部分。任何幫助將不勝感激。如果一個正則表達式太複雜了,就不要這麼說,碰巧寫一個某種類型的遍歷器。
感謝
我正在尋找一種方式,將整數和連字符串中的任何單個數字與0相加。用正則表達式匹配並替換一個數字?
「-0-2-3 --- --- 12-0 10-」 變得 「-00-02-03 --- --- 12-00 10」
或
「-12-14-7-8-」 變得 「-12-13-07-08-」
我使用\ d試圖{1}以破折號,但它的組合似乎沒有捕獲所有正確的部分。任何幫助將不勝感激。如果一個正則表達式太複雜了,就不要這麼說,碰巧寫一個某種類型的遍歷器。
感謝
如果正則表達式引擎支持lookaround斷言,那麼這是一種方法:
s/(?<!\d)(?=\d(?!\d))/0/g
如果正則表達式引擎不支持後向斷言(例如, JavaScript的),則:
s/(^|[^\d])(?=\d(!\d))/$10/g
如果正則表達式引擎不支持環視斷言的話,那麼:
s/(^|[^\d])(\d)([^\d])/$10$2$3/g
我會使用類似
s/-\([0-9]\)-/-0\1-/g
這不會對鄰近單號工作,但如果你運行它兩次,所有的數字都陷入:
Alejandra:~$cat tmp.txt
-12-14-7-8-2-13-1-5-3-4-7-
Alejandra:~$sed "s/-\([0-9]\)-/-0\1-/g" tmp.txt | sed "s/-\([0-9]\)-/-0\1-/g"
-12-14-07-08-02-13-01-05-03-04-07-
不能在我的控制檯與sed ...(我確實轉義括號並將$改爲\) – alestanis
一個在Ruby中發揮了魅力。速度對我來說不是問題,所以非常好,謝謝 – redroot89
@alestanis - 我相信''sed''需要處於Perl模式(''-R'')才能使周圍的斷言生效。沒有周身的斷言,這個任務在單個替換中是不可能的。 –