Excel VBA正则表达式检查重复字符串

时间:2017-02-07 02:31:53

标签: regex excel string vba excel-vba

我有一些用户输入,我想验证其正确性。用户应输入一组或多组字符,以逗号分隔。

所以这些是有效的输入

  • COM1
  • COM1,COM2,1234

这些无效

  • COM - 仅限3个字符
  • COM1,123 - 一组只有3个字符
  • COM1.1234,abcd - 点分隔符不是逗号

我用Google搜索了一个正则表达式模式,发现了一个可能的模式,测试了任意3个字符的重复实例,我修改了这样的

/ ^({4})。* \ $ 1 /

但这不是匹配。

我可以在传递给测试之前管理可能存在或可能不存在的最后一个逗号,以便它始终存在。

最好,我想测试字母(任何情况)和数字,但我可以使用任何字符。

我知道我可以轻松地在直接VBA中将逗号分隔符上的输入拆分并循环遍历每个数组元素的每个字符,但正则表达式似乎更有效,并且我会有更多的情况而不是略有不同的模式,因此参数化正则表达式将是更好的设计。

TIA

2 个答案:

答案 0 :(得分:3)

我相信这可以做你想要的:

^([A-Z|a-z|0-9]{4},)*[A-Z|a-z|0-9]{4}$

这是一行开头,后跟零个或多个四个字母或数字组,以逗号结尾,后跟一组四个字母或数字后跟一行结束。

您可以在此处使用它:https://regex101.com/r/Hdv65h/1

答案 1 :(得分:2)

正则表达式

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

应该有用。

您可以尝试使用以下功能查看它是否适用于所有情况。假设您的测试字符串位于电子表格的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