基于YYYY-WW的日期的正则表达式

时间:2015-09-24 07:34:28

标签: regex excel vba

我有以下[有效]正则表达式,我试图将其放入VBA应用程序中:

(?<year>(\d{2}){0,2}[-\/]?)(?<week>(\d{2}))

我一直收到错误5017.方法&#39;执行&#39;对象&#39; IRegExp2&#39;。

不支持

但如果我放弃了命名的捕获并插入:

((\d{2}){0,2}[-\/]?)((\d{2}))

我是否正确地假设&#34; vbscript&#34;正则表达式的酸味不支持命名组?

我是否可以在VBA中引用另一个标准(对Windows)库以获得更好的正则表达式解析器?

我喜欢使用C#,因为它可以立即工作并将我的小组拉出来,但由于我的整个应用插件都在MS Office中,因此我受限于VBA。

1 个答案:

答案 0 :(得分:0)

([1-2][0-9])([0-9][0-9])[-\/](0[1-9]|[1-4][0-9]|5[0-2]) 的VBA兼容正则表达式(1900-01到2999-52之间)是:

SubMatches

这将排除第53周到第99周。

要获得世纪,年,周,请使用Option Explicit Sub TestYYYYWWRegex() Dim objRegex As New RegExp Dim objMatches As MatchCollection Dim varTests As Variant Dim varTest As Variant Dim strMessage As String objRegex.Pattern = "([1-2][0-9])([0-9][0-9])[-\/](0[1-9]|[1-4][0-9]|5[0-2])" varTests = Array("2017-13", "1975-09", "2016-63", "zz78-0g", "1978-00", "1234-56", "1234-01", "YYYY-WW") For Each varTest In varTests Set objMatches = objRegex.Execute(CStr(varTest)) If objMatches.Count > 0 Then With objMatches strMessage = "Matched: " & CStr(varTest) strMessage = strMessage & " C: " & .Item(0).SubMatches(0) strMessage = strMessage & " Y: " & .Item(0).SubMatches(1) strMessage = strMessage & " W: " & .Item(0).SubMatches(2) End With Else strMessage = "No match for: " & CStr(varTest) End If 'check test case Debug.Print strMessage Next varTest End Sub 集合来获取不同的捕获组。

Matched: 2017-13 C: 20 Y: 17 W: 13
Matched: 1975-09 C: 19 Y: 75 W: 09
No match for: 2016-63
No match for: zz78-0g
No match for: 1978-00
No match for: 1234-56
Matched: 1234-01 C: 12 Y: 34 W: 01
No match for: YYYY-WW

测试用例:

android {}