VBA正则表达式,替换组

时间:2014-04-03 23:11:21

标签: regex excel vba excel-vba

我正在使用Excel中的VBA正则表达式替换格式错误的日期字符串(和其他项目)。

我希望替换具有正确的YYYY-MMM-DD格式的日期字符串,但缺少破折号分隔符 - 例如:

2014,APRIL,04 or 
2014.Apr,04 or
2014/Apr-04

我希望它们的格式如下:

2014-Apr-04
2014-April-04

(即保留提供的年,月,日元素,但只是用短划线代替逗号,句号或其他奇怪字符)

我目前的代码是:

Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = False ' Several occurrence to be found
    .IgnoreCase = True
    .Pattern = "(((19|20)[0-9]{2})[, /.]([a-zA-Z]+)[, /.](0[1-9]|[12][0-9]|3[01])[, /.])"
End With

Dim ReplacePattern As String
ReplacePattern = "$1-$2-$3"

Dim match As Boolean
match = RE.Test(LogEntryTxt)

LogEntryTxt = RE.Replace(LogEntryTxt, ReplacePattern)

但似乎更换不正确。有人可以帮忙吗?我已经尝试过研究命名组,编号组等,但我所尝试的并没有完成它。

1 个答案:

答案 0 :(得分:5)

您的替换人员变得混乱,因为您在匹配的部分区域内捕获了与$1-$2-$3无法对应的YYYY-MMM-DD。您可以保留当前的正则表达式模式并使用$2-$4-$5进行替换,也可以采用更优雅的方法,并将以后需要引用的捕获组更改为非捕获组:

(?:((?:19|20)[0-9]{2})[, /.]([a-zA-Z]+)[, /.](0[1-9]|[12][0-9]|3[01])[, /.]) ^^ ^^

然后替换为您当前正在进行的$1-$2-$3