gpt4 book ai didi

regex - 如何在 VBA 中使用正则表达式测试特定字符

转载 作者:行者123 更新时间:2023-12-02 16:58:17 25 4
gpt4 key购买 nike

我需要测试字符串变量以确保它与特定格式匹配:

XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

...其中 x 可以是任何字母数字字符(a - z、0 - 9)。

我尝试了以下方法,但似乎不起作用(测试值不断失败)

If val Like "^([A-Za-z0-9_]{8})([-]{1})([A-Za-z0-9_]{4})([-]{1})([A-Za-z0-9_]{4})([-]{1})([A-Za-z0-9_]{4})([-]{1})([A-Za-z0-9_]{12})" Then
MsgBox "OK"
Else
MsgBox "FAIL"
End If

.

fnCheckSubscriptionID "fdda752d-32de-474e-959e-4b5bf7574436"

有什么指点吗?我不介意这是否可以通过 vba 或公式来实现。

最佳答案

您已经在使用 ^ 字符串开头 anchor ,这非常棒。您还需要 $ 字符串结尾 anchor ,否则在最后一组数字中,正则表达式引擎能够匹配较长数字组(例如 15 位数字)的前 12 位数字。

我以更紧凑的方式重写了您的正则表达式:

^[A-Z0-9]{8}-(?:[A-Z0-9]{4}-){3}[A-Z0-9]{12}$

请注意以下一些调整:

  • [-]{1} 只能用 -
  • 表示
  • 我删除了下划线,因为你说你只想要字母和数字。如果您确实想要下划线,而不是 [A-Z0-9]{8} (例如),您可以将 \w{8} 写为 \w 匹配字母、数字和下划线。
  • 删除了小写字母。如果您确实希望允许使用小写字母,我们将在代码中打开不区分大小写的模式(请参阅下面示例代码的第 3 行)。
  • 不需要(捕获组),因此删除了括号
  • 我们有三组,每组四个字母和一个破折号,因此用 {3} 编写 (?:[A-Z0-9]{4}-)

示例代码

Dim myRegExp, FoundMatch
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Pattern = "^[A-Z0-9]{8}-(?:[A-Z0-9]{4}-){3}[A-Z0-9]{12}$"
FoundMatch = myRegExp.Test(SubjectString)

关于regex - 如何在 VBA 中使用正则表达式测试特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222809/

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