VB.NET 为什么此正则表达式 return 为假?

VB.NET Why does this regex return false?

我有一个像这样的功能,我在其中读取文件名,并根据文件名是否包含“ABC”、“123DEF”、“123HIJ”或“123KLM”...我想检查一下使用正则表达式和 return 一个真实值。

这是一个示例,说明我如何在该函数中使用我的正则表达式而不张贴所有噪音。

Sub testFooBar()
        Dim testReg As New Regex("(ABC|123ABC|123DEF|123HIJ|123KLM)")
        
        Select Case "ABC"
            Case testReg.IsMatch("123ABC")
        End Select
End Sub

我也尝试了 (ABC|123(ABC|DEF|HIJ)) 因为我的结果可能是这样的:

ABC
123ABC
123DEF
123HIJ

我认为 return 有两组,我认为我需要的是 return 一组。我只是不明白,如果有人能帮助我理解,为什么找不到匹配项。也许我应该改用 .Contains() 之类的东西。我只是使用正则表达式,因为这就是我开始我的功能的方式,现在我想了解这个问题。

确切的问题是 Case testReg.IsMatch("ABC") 下的代码不会 运行 因为匹配是 returning false。

您在这里看到的并不是真正的正则表达式问题:

您有一个 case 语句,您在其中尝试将字符串与布尔值相匹配。那导致你的问题。我建议将此语法作为替代方法,或者您可以只使用 IF 语句。

    Dim testReg As New Regex("(ABC|123ABC|123DEF|123HIJ)")
    
    Select Case True
        Case testReg.IsMatch("123ABC")
            Console.WriteLine("HERE")
    End Select
    

如上所述,您的 Regex 不是问题,而是 Select Case.

如果您需要知道正则表达式的成功之处据我所知,它可能是多个值,你可以 return a Tuple,

这样的东西可能有助于你开始。

Function TestFooBar(ByVal input As String) As (Success As Boolean, Output As String)

    If String.IsNullOrEmpty(input) Then Throw New ArgumentNullException(NameOf(input))

    Dim pattern As String = "(ABC|123ABC|123DEF|123HIJ)"
    Dim match = Regex.Match(input, pattern, options:=RegexOptions.None)

    Return (match.Success, match.Value)

End Function

并调用它

Sub Main(args As String())

    Dim foo = TestFooBar("ABC")

    If foo.Success Then
        Console.WriteLine($"Value Found Was {foo.Output}")
    End If

End Sub

当然,在此示例中,Output 值是 Input,但对于更复杂的字符串,它应该有助于了解找到了什么或没有找到什么。