我有一个包含可能由正则表达式“[1-9]生成的表达式的文本?[0-9]。[1-9]?[0-9]。[1-9]?[0 -9]”。
不,我想执行定期更换,在没有第一个数字时在每个部分前面放置“0”。例如,字符串“1.10.3”将变为“01.10.03”。
我的问题是,当且仅当第一部分没有第二个数字时,我不知道如何捕获第一个数字。使用类似“。?([0-9])[^ 0-9]”的东西会捕获第一个数字,即使有另一个数字。因此“12.3.4”将变为“02.03.04”或“102.03.04”。
您是否知道是否有任何符合此案例的正则表达式?
[编辑:]
我正在使用VBScript Regexp Object v5.5 supports lookaheads。
我尝试使用the answer of Mark Byers提供的正则表达式:
Set re = New RegExp
re.Global = True
re.Pattern = "(?:^|[^0-9])([0-9])(?![0-9])"
Dim x As String
x = "1.3.4 string"
x = re.replace(x, "0$1")
MsgBox (x)
不幸的是,这段代码的结果是“010304字符串” - 点被剥离了。我试图修改模式以匹配点和空格,如“(?:^ | [^ 0-9])([0-9])([。])”然后替换为“0 $ 1 $ 2”但结果是一样的。
你知道问题可能是什么吗?
答案 0 :(得分:1)
使用外观,您可以找到不在另一个数字旁边的数字:
(?<![0-9])[0-9](?![0-9])
没有外观(因为一些流行的正则表达式引擎不支持):
(^|[^0-9])([0-9])(?![0-9])
在线查看第二个版本:Rubular
<强>更新强>
试试这个:
re.Pattern = "(^|[^0-9])([0-9])(?![0-9])"
Dim x As String
x = "1.3.4 string"
x = re.replace(x, "$1X$2")
答案 1 :(得分:0)
使用GNU sed
,您可以尝试:
sed 's/^\(\d\.\)/0\1/;s/\.\(\d\)\./.0\1./g;\.\(\d\)$/.0\1/' INPUTFILE
HTH