gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:49:17 27 4
gpt4 key购买 nike

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

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

我不断收到错误 5017。对象“IRegExp2”不支持方法“执行”。

但是如果我放弃指定的捕获并插入:

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

我是否正确地假设正则表达式的“vbscript”酸味不支持命名组?

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

我很想使用 C# 版本,因为它可以立即运行并将我的组撤出,但我只能使用 VBA,因为我的整个应用程序插件都在 MS Office 中。

最佳答案

YYYY-WW(1900-01 和 2999-52 之间)的 VBA 兼容正则表达式是:

([1-2][0-9])([0-9][0-9])[-\/](0[1-9]|[1-4][0-9]|5[0-2])

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

要获取世纪、年份、星期,请使用 SubMatches 集合来获取不同的捕获组。

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

关于regex - 基于 YYYY-WW 的日期的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com