问题描述
我有这种类型的json响应:
I'm having this type of json response:
我想从此回复中获取所有 guid ...
I want to get all guid from this response...
它可能有100多个 guid 记录.我想要所有这些.
It may have more than 100 records of guid. I want to have all of them.
推荐答案
这是基于正则表达式的,它从单元格中读取字符串.如果还需要guids
,则将传递给guids?":(\d+[^,])
的模式更改.
This is regex based reading your string from a cell. If there can also be guids
which you want then change the pattern passed to guids?":(\d+[^,])
.
Option Explicit
Public Sub test()
Dim s As String, i As Long, arr()
s = [A1]
arr = GetMatches(s, "guid"":(\d+[^,])")
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next
End Sub
Public Function GetMatches(ByVal inputString As String, ByVal sPattern As String) As Variant
Dim matches As Object, iMatch As Object, s As String, arrMatches(), i As Long
With CreateObject("vbscript.regexp")
.Global = True
.MultiLine = True
.IgnoreCase = True
.pattern = sPattern
If .test(inputString) Then
Set matches = .Execute(inputString)
ReDim arrMatches(0 To matches.Count - 1)
For Each iMatch In matches
arrMatches(i) = iMatch.submatches.item(0)
i = i + 1
Next iMatch
Else
ReDim arrMatches(0)
arrMatches(0) = vbNullString
End If
End With
GetMatches = arrMatches
End Function
正则表达式:
在此处尝试.
/
guid":(\d+[^,])
/
gm
guid":
从字面上匹配字符guid":
(区分大小写)
guid":
matches the characters guid":
literally (case sensitive)
第一个捕获组(\d+[^,])
\d+
与digit (equal to [0-9])
匹配+
量词-在一次和无限次之间进行匹配,并尽可能多地匹配,并根据需要返回(贪婪)
\d+
matches a digit (equal to [0-9])
+
Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
匹配[^,]
下方列表中不存在的单个字符,
与字符匹配,按字面值(区分大小写)
Match a single character not present in the list below [^,]
,
matches the character , literally (case sensitive)
我提取了第一组子匹配项.
I extract the first group submatch.
这篇关于VBA-正则表达式-单词中的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!