Regex VBA正则表达式值对
我是regex新手,我正在尝试使用一个模式捕获一系列键值对。我希望捕获的值带有一个键,一行一行,以“=”作为分隔符:Regex VBA正则表达式值对,regex,vba,Regex,Vba,我是regex新手,我正在尝试使用一个模式捕获一系列键值对。我希望捕获的值带有一个键,一行一行,以“=”作为分隔符: Field1 = value1 Field2 = value2 Field3 = value3 但是,这些值可能是复杂的字符串,例如: 123@example.com abc-det-FLP VCN:20161115:74055:5 99.70 我是在VBA中实现的,它显然不支持正则表达式“lookback” 有人能帮我定义一个正则表达
Field1 = value1
Field2 = value2
Field3 = value3
但是,这些值可能是复杂的字符串,例如:
123@example.com
abc-det-FLP
VCN:20161115:74055:5
99.70
我是在VBA中实现的,它显然不支持正则表达式“lookback”
有人能帮我定义一个正则表达式模式来捕获值吗?我正在使用以下模式(不幸的是,由于lookbehind,该模式无法运行):(?您可以尝试:
\w+\s*=\s*(\S+)
这将考虑=
周围的空白,并捕获配对的右侧
代码示例:
Option Explicit
Sub Test()
Dim objRegex As RegExp
Dim objMatches As MatchCollection
Dim varTests As Variant
Dim varTest As Variant
Dim strTest As String
Set objRegex = New RegExp
objRegex.Pattern = "\w+\s*=(\S+)"
varTests = Array("Field1=value1", _
"Field1=123@abc.com", _
"Field1=abc- det - FLP", _
"Field1=VCN:20161115:74055:5", _
"Field1=123=456=789", _
"Field1=99.70")
For Each varTest In varTests
If objRegex.Test(CStr(varTest)) Then
Set objMatches = objRegex.Execute(CStr(varTest))
strTest = "Matched: " & objMatches(0).SubMatches(0)
Else
strTest = "No match: " & CStr(varTest)
End If
Debug.Print strTest
Next
End Sub
也许Split(text,“=”,2,1)
在这里就足够了,然后只需获取第二个元素。如果需要正则表达式,它将是=\s*(.+)
,然后获取子匹配(0)