json 如何在www.example.com行中使用通配符vb.net,包含用双引号括起来的内容

ztyzrc3y  于 2022-12-20  发布在  .NET
关注(0)|答案(1)|浏览(156)

我有一些vb.net代码

Dim reader As New StreamReader("C:\geoData\zipCodes.geojson", Encoding.Default)
    Dim line As String = Nothing
    Dim lines As Integer = 0
    While (reader.Peek() <> -1)

If line.Contains("""ZCTA5CE20"": ""47236""") Then

在一个2.5gig的json文件中查找这一行是非常有效的。但是,我需要查找所有包含

If line.Contains("""ZCTA5CE20"": ""47*""") Then

所以我需要在47后面加一个通配符,但是如果我加了一个 *,它就需要一个 * 后面加双引号,而不是通配符。我仍然需要在47前面加双引号。
我有代码将其作为JSON对象工作,但如果我尝试加载整个文件,它会引发内存错误。

Dim json = File.ReadAllText("C:\geoData\zipCodes.geojson")
    Dim ResultArray As New JArray
    Dim Jvalues As JObject = JObject.Parse(json)
cngwdvgl

cngwdvgl1#

您将需要正则表达式搜索。

Dim jsonRegex = New Regex("""ZCTA5CE20"":\ ""47.*?""", RegexOptions.Compiled)

If jsonRegex.IsMatch(line) Then
   ...
End If

在正则表达式中,.是一个通配符,对应于任何字符的一次出现。*表示重复该字符零次、一次或多次,?表示尽可能少地重复。?确保没有引号被跳过,否则.*将跨越到行中的最后一个双引号。但在正则表达式中,有几种解决问题的方法。例如,您可以将.*?替换为\d*\d代表一个数字。
\转义后面的白色字符。
您可以使用File.ReadLines一次一行地遍历这些行,而不必一次加载整个文件。

Dim jsonRegex = New Regex("""ZCTA5CE20"":\ ""47.*?""", RegexOptions.Compiled)

For Each line As String In File.ReadLines("C:\geoData\zipCodes.geojson")
    If jsonRegex.IsMatch(line) Then
       ...
    End If
Next

相关问题