使用EXCEL VBA REGEX重新格式化字符串中的多个日期

时间:2018-05-17 14:22:51

标签: regex excel vba date replace

我有一个应用程序,它以复制文本的形式输出查询到剪贴板。

我已经将文本解析为数组,然后我将其填充回excel。

源字符串包含多个日期实例,格式为" dd.mm.yyyy"我一直在输出列上使用find / replace将其更改为" dd / mm / yyyy"。我想知道在使用正则表达式解析数组之前是否有可能/更快地替换字符串中的这些。

strPattern = "(0?[1-9]|[12][0-9]|3[01])[\.](0?[1-9]|1[012])[\.]\d{4}"
strReplace = "$dd\/dd\/dddd"

    With regEx
        .Global = True
        .MultiLine = False
        .IgnoreCase = False
        .Pattern = strPattern
    End With

    If regEx.test(sString) Then
        sString = regEx.Replace(sString, strReplace)
    End If

最终结果不是我所希望的。我认为' strReplace'的格式。这是错误的,但我不能很好地了解正则表达式。以上是通过(太多)小时的网络搜索来实现的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用

strPattern = "(0?[1-9]|[12][0-9]|3[01])\.(0?[1-9]|1[012])\.(\d{4})"
strReplace = "$1/$2/$3"

With regEx
    .Global = True
    .MultiLine = False
    .IgnoreCase = False
    .Pattern = strPattern
End With

sString = regEx.Replace(sString, strReplace)

注意:

  • 您可以使用替换字符串中的$n占位符来引用捕获组值
  • 您不需要使用[\.],它与\.(或[.]
  • 相同
  • 您无需为匹配项测试字符串。如果没有匹配,则不会修改字符串。

提示:如果您想将这些字符串匹配为“整个字词”,请使用字词边界\b

strPattern = "\b(0?[1-9]|[12][0-9]|3[01])\.(0?[1-9]|1[012])\.(\d{4})\b"

现在,只有在没有用字母,数字或_字符括起来时才能找到类似日期的字符串。