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
,但对于更复杂的字符串,它应该有助于了解找到了什么或没有找到什么。
我有一个像这样的功能,我在其中读取文件名,并根据文件名是否包含“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
,但对于更复杂的字符串,它应该有助于了解找到了什么或没有找到什么。