匹配并用正则表达式替换一位数?

时间:2012-10-26 21:32:04

标签: regex

我正在寻找一种在整数和连字符字符串中添加任意单个数字的方法,例如。

“ - 0-2-3 --- 12-0 --- 10-”变为“ - 00-02-03 --- 12-00 --- 10 - ”< / p>

“ - 12-14-7-8-”成为“ - 12-13-07-08 - ”

我尝试将\ d {1}与破折号组合使用,但它似乎没有捕获所有正确的部分。任何帮助将非常感谢。如果正则表达式太复杂而无法做到这一点,那就说,碰巧编写了某种遍历器。

由于

2 个答案:

答案 0 :(得分:3)

如果正则表达式引擎支持外观断言,那么这是一种方法:

s/(?<!\d)(?=\d(?!\d))/0/g

如果正则表达式引擎不支持lookbehind断言(例如JavaScript),那么:

s/(^|[^\d])(?=\d(!\d))/$10/g

如果正则表达式引擎根本不支持环绕声断言,那么:

s/(^|[^\d])(\d)([^\d])/$10$2$3/g

答案 1 :(得分:2)

我会使用像

这样的东西
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-