【问题标题】:Match second date in a string匹配字符串中的第二个日期
【发布时间】:2017-11-04 11:36:44
【问题描述】:

您能否提供有关用于匹配电子邮件中以下日期格式的 VBA 脚本的建议。

开始:23.06.2017 00:00:00(CEST)22.06.2017 22:00(格林威治标准时间)

注意:还有另一个日期。我只需匹配粗体即可将其导出到 Excel。

Set SD = CreateObject("vbscript.regexp")

With SD.Pattern = "((Start:*\s*\s*[\d-\.]*\s*\s*\s*[\d-\.]*))"
    .Global = False
    .IgnoreCase = False
End With

If SD.test(sText) Then
    Set D1 = SD.Execute(sText)
    For Each D In D1
        vText1 = Trim(D.SubMatches(1))
    Next
End If
xlSheet.Range("C" & rCount) = vText1

【问题讨论】:

标签: regex excel vba email outlook


【解决方案1】:

使用这个正则表达式:[0-9]{2}\.[0-9]{2}\.[0-9]{4}\s[0-9]{2}\:[0-9]{2}(?=\s\(GMT\))

这是一个工作示例。 RegexStorm.net

第一部分是数字的集合,最后一部分说后面必须跟一个空格和(GMT)。

这是一个指向 VB.Net 示例的链接,用于获取日期/时间字符串。您需要将其转换为 VBA。

.Net Fiddle

【讨论】:

  • 非常感谢,但如何获得第二次出现如下结束日期:开始:23.06.2017 00:00:00(CEST)22.06.2017 22:00(格林威治标准时间)结束:23.06.2017 05:00:00 (CEST) 23.06.2017 03:00 (GMT) 赞赏:)
  • 它将同时捕获日期/时间。您将需要访问捕获组。会有两个。单击更新的 RegexStorm 链接,然后单击底部的表格选项卡以查看它如何获得两个匹配项。
  • 再次感谢,对不起,但我仍然可以得到第一个,请查看代码:如果 SD.test(sText) Then Set D1 = SD.Execute(sText) For Each D In D1 vText1 = Trim (D.SubMatches(0)) vText2 = Trim(D.SubMatches(1)) Next End If xlSheet.Range("C" & rCount) = vText1 xlS​​heet.Range("D" & rCount) = vText2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多