Regex 与给定字符串匹配的VB.Net正则表达式
我有两个字符串数组,如下所示(B是A的子集),并试图从A中提取B上匹配的元素Regex 与给定字符串匹配的VB.Net正则表达式,regex,vb.net,Regex,Vb.net,我有两个字符串数组,如下所示(B是A的子集),并试图从A中提取B上匹配的元素 A = ["1.1","1.1.1","1.1.2","1.1.3","1.2","1.3","1.4",....] B = ["1.1.*","1.2"] This should return ["1.1.1","1.1.2","1.1.3","1.2"] 我的示例尝试解决此问题: Dim regEx As New Regex("1.1.*") Console.WriteLine(regEx.IsMatch("
A = ["1.1","1.1.1","1.1.2","1.1.3","1.2","1.3","1.4",....]
B = ["1.1.*","1.2"]
This should return ["1.1.1","1.1.2","1.1.3","1.2"]
我的示例尝试解决此问题:
Dim regEx As New Regex("1.1.*")
Console.WriteLine(regEx.IsMatch("1.1.1")) 'TRUE which is Expected
Console.WriteLine(regEx.IsMatch("1.1")) 'TRUE - Expected is FALSE
这里的技巧是使用正则表达式而不是Like运算符。为了使用正则表达式,需要通过将每个点替换为
\.
和*替换为\d+
将模式(B数组项)重建为正则表达式模式。\d+
将匹配任何长度的任何数字。*
匹配0个或更多字符<代码>+匹配一个或多个字符。使用+
。如果你想匹配文字上的点,就用逃逸点。如果需要匹配整个字符串,请添加锚。或者,如果只想匹配通配符,请使用like
运算符。添加到重复列表中。注意:正则表达式不是通配符。除了1.2
之外,我想不应该匹配1.2.1
。我没有办法更改B数组中的元素。数据源是一个外部服务。你能帮我吗
Dim A() As String = {"1.1.1","1.1.2","1.1.3","1.2","1.3","1.4"}
Dim B() As String = {"1.1.*","1.2"}
Dim isMatch = Function(str As String, patterns() As String)
For Each pattern As String In patterns
If pattern.Contains("*") Then
Dim regexPattern As String = "^" & pattern.Replace(".","\.").Replace("*", "\d+") & "$"
If Regex.IsMatch(str, regexpattern) Then Return True
Else
If str.Equals(pattern) Then Return True
End If
Next
Return False
End Function
Dim result = A.Where(Function(s) isMatch(s, B))