Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex VB.NET中作为字典中键的正则表达式_Regex_Vb.net_Dictionary - Fatal编程技术网

Regex VB.NET中作为字典中键的正则表达式

Regex VB.NET中作为字典中键的正则表达式,regex,vb.net,dictionary,Regex,Vb.net,Dictionary,有没有办法将Regex用作字典中的键?类似于字典(正则表达式,字符串) 我试图通过字符串在列表中查找一个Regex(假设第一次没有字典),该字符串与之匹配 我可以通过手动遍历RegEx表达式列表来实现。我只是在寻找一种更容易做到这一点的方法,比如字典中的TryGetValue当您在字典中使用Regex作为键的类型时,它会起作用,但它会按对象实例比较键,而不是按表达式字符串比较键。换句话说,如果您创建两个单独的Regex对象,对这两个对象使用相同的表达式,然后将它们添加到字典中,它们将被视为两个不

有没有办法将
Regex
用作
字典中的键?类似于
字典(正则表达式,字符串)

我试图通过字符串在列表中查找一个
Regex
(假设第一次没有字典),该字符串与之匹配


我可以通过手动遍历RegEx表达式列表来实现。我只是在寻找一种更容易做到这一点的方法,比如
字典中的
TryGetValue

当您在
字典中使用
Regex
作为键的类型时,它会起作用,但它会按对象实例比较键,而不是按表达式字符串比较键。换句话说,如果您创建两个单独的
Regex
对象,对这两个对象使用相同的表达式,然后将它们添加到字典中,它们将被视为两个不同的键(因为它们是两个不同的对象)

如果要使用表达式作为键,而不是
Regex
对象,则需要创建键类型为
String
的字典,例如:

Dim d As New Dictionary(Of String, String)()
d(".*") = "1"
d(".*") = "2"
d(".*") = "3"
Console.WriteLine(d.Count)  ' Outputs "1"
然后,当您使用表达式字符串作为键时,可以使用
TryGetValue
,如您所述:

Dim d As New Dictionary(Of String, String)()
d(".*") = "1"
Dim value As String = Nothing

' Outputs "1"
If d.TryGetValue(".*", value) Then
    Console.WriteLine(value)
Else
    Console.WriteLine("Not found")
End If

' Outputs "Not found"
If d.TryGetValue(".+", value) Then
    Console.WriteLine(value)
Else
    Console.WriteLine("Not found")
End If

你自己试过吗?也许你想要相反的结果,键是字符串,值是正则表达式。这听起来更有用。你需要相同的模式和选项吗?我不知道正则表达式是否覆盖等于。是的,但目的是什么?你为什么要那样做?你想完成什么?也要多谈谈你想做什么。是否要使用正则表达式对象作为键,然后匹配整个对象以查找值?或者您正在尝试某种“松散”或“模糊”的键查找?或
Dim d As New Dictionary(Of String, String)()
d(".*") = "1"
Dim value As String = Nothing

' Outputs "1"
If d.TryGetValue(".*", value) Then
    Console.WriteLine(value)
Else
    Console.WriteLine("Not found")
End If

' Outputs "Not found"
If d.TryGetValue(".+", value) Then
    Console.WriteLine(value)
Else
    Console.WriteLine("Not found")
End If