代码之家  ›  专栏  ›  技术社区  ›  Michael

使用正则表达式提取指定符号之间的所有子字符串

vba
  •  1
  • Michael  · 技术社区  · 6 年前

    Excel 2007版

    Private Function get_all_matches(phrase)
        Dim regEx As Object
        Dim result As Variant
    
        Set regEx = CreateObject("vbscript.regexp")
    
        With regEx
            .IgnoreCase = True
            .Pattern = "/.*/"
            .Global = True
        End With
    
        Set result = regEx.Execute(phrase)
        Set get_all_matches = result
    End Function
    

    然后我使用函数:

    phrase = "where is /my/ ups /hiding/"
    Set keys = get_all_matches(phrase)
    

    结果是键(0)。值:“/my/ups/hidden/”。

    换句话说,外部斜线之间的所有内容都被提取出来。 但预期的结果是:

    keys(0).Value: "/my/"
    keys(1).Value: "/hiding/"
    

    你能帮我吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Pankaj Jaju    6 年前

    你应该用 \/(.*?)\/ 图案

    图案说明:

    匹配字符/逐字(区分大小写)第一次捕获

    集团 ?) .? 匹配任何字符(行结束符除外)

    量词在零次和无限次之间匹配,尽可能少地匹配,根据需要扩展(lazy)/匹配字符/

    https://regex101.com/r/wdNY18/1