RegEX在vb.net中无法匹配

时间:2017-03-09 15:07:19

标签: regex vb.net

我需要找到带有特殊字的文件夹名称。我的代码不起作用。有人会告诉我如何解决它。 我希望带或不带()的文件夹名称没问题。我不确定毯子里有多少位数。有例子:

C:\test\REG33006\2017-03-09
C:\test\REG33006\2017-03-09(1)
C:\test\REG33006\2017-03-09(100)

vb中有我的代码:

 Dim Dir as string="C:\test\REG33006\2017-03-09(1)"
 Dim patt As String ="^C:\\test\REG33006\\2017-03-09\(*\d*\)*$"
 Dim regex As Regex = New Regex(patt)
 Dim match As Match = regex.Match(Dir)
     If match.Success Then
         If Dir.Contains(")") Then
             Dim indexStart As Integer = Dir.IndexOf("(")
               maxNumber = CInt(Dir.Substring(indexStart + 1, Dir.Length -  indexStart))


         End If
     End If

2 个答案:

答案 0 :(得分:1)

括号定义了一个捕获组。 你可以使用......

    dim patt as string = "C:\\test\\REG33006\\2017-03-09\((.*)\)"
    if match.success then
         result = match.groups(1).value

答案 1 :(得分:0)

您可以使用

 Dim regex As Regex = New Regex("^C:\\test\\REG33006\\2017-03-09(?:\(([0-9]*)\))?$")
 Dim match As Match = regex.Match(Dir)
 If match.Success Then
     maxnumber  = match.Group(1).Value
 End If

正则表达式匹配:

  • ^ - 字符串的开头
  • C:\\test\\REG33006\\2017-03-09 - 文字字符序列C:\test\REG33006\2017-03-09
  • (?:\(([0-9]*)\))? - 可选的(1或0次)序列:
    • \( - (
    • ([0-9]*) - 第1组(使用match.Group(1).Value检索其值):零个或多个数字
    • \) - )
  • $ - 字符串结束,