Excel VBA正则expression式检查重复的string

我有一些我想validation正确性的用户input。 用户应该input一组或多组字符,用逗号分隔。

所以这些都是有效的input

  • COM1
  • COM1,COM2,1234

这些都是无效的

  • COM – 只有3个字符
  • COM1,123 – 一套只有3个字符
  • COM1.1234,abcd – 点分隔符不是逗号

我GOOGLE了一个正则expression式模式,并find了一个可能的模式,testing任何3个字符的循环实例,我修改如此

/^(.{4,}).*\1$/

但是这不是find匹配。

在通过testing之前,我可以pipe理最后的逗号,以便它始终在那里。

最好是我只想testing字母(任何情况)和数字,但是我可以和任何字符一起生活。

我知道我可以很容易地做到这一点在直VBA分割input一个逗号分隔符,并循环每个数组元素的每个字符,但正则expression式似乎更有效率,我会有更多的情况比有稍微不同的模式,所以参数化的正则expression式那会更好的devise。

TIA

我相信这是你想要的:

^([AZ|az|0-9]{4},)*[AZ|az|0-9]{4}$ 

这是一行开头,后跟零个或多个四个字母或数字的组,后面跟着一个逗号,然后是一组四个字母或数字,后跟一个行尾。

你可以在这里玩: https : //regex101.com/r/Hdv65h/1

正则expression式

 "^[\w]{4}(,[\w]{4})*$" 

应该pipe用。

您可以尝试使用以下function查看它是否适用于您的所有情况。 假设您的testingstring在电子表格的单元格A1到A5中:

 Sub findPattern() Dim regEx As New RegExp regEx.Global = True regEx.IgnoreCase = True regEx.Pattern = "^[\w]{4}(,[\w]{4})*$" Dim i As Integer Dim val As String For i = 1 To 5: val = Trim(Cells(i, 1).Value) Set mat = regEx.Execute(val) If mat.Count = 0 Then MsgBox ("No match found for " & val) Else MsgBox ("Match found for " & val) End If Next End Sub