Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 VBA正则表达式值对_Regex_Vba - Fatal编程技术网

Regex VBA正则表达式值对

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” 有人能帮我定义一个正则表达

我是regex新手,我正在尝试使用一个模式捕获一系列键值对。我希望捕获的值带有一个键,一行一行,以“=”作为分隔符:

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)