Regex vba正则表达式-在空格之前获取非空格字符

Regex vba正则表达式-在空格之前获取非空格字符,regex,vba,Regex,Vba,到目前为止我有这个 search_str = "-X made" regEx.Pattern = "(\S*)[^\s*]" regEx.IgnoreCase = True regEx.Global = True If regEx.test(search_str) Then Set matches = regEx.Execute(search_str) extractStr = matches(0).SubMatches(0) end if 我想要-X(在第一个空格之前的任何

到目前为止我有这个

search_str = "-X made"
regEx.Pattern = "(\S*)[^\s*]"
regEx.IgnoreCase = True
regEx.Global = True
If regEx.test(search_str) Then
    Set matches = regEx.Execute(search_str) 
    extractStr = matches(0).SubMatches(0)
end if

我想要-X(在第一个空格之前的任何东西),但是我没有得到它

模式字符串
“(\S*)[^\S*]”存在一些问题。

  • 非转义反斜杠在这个特殊语言的字符串文字中,反斜杠转义是不必要的(谢谢)
  • \S
    [^\S]
    是一回事
  • [foo*]
    表示匹配
    f
    o
    *
  • 你可能想要这样的东西

    regEx.Pattern = "(\S+)(?=\s)"
    
    regEx.Pattern = "^(\S*)(?=\s|$)"
    
    也就是说

    • (\S+)
      贪婪地匹配一个或多个非空白(并记住匹配),直到
    • (?=\s)
      下一个字符是空白
    请注意,像
    这样的字符串将不匹配,如果您希望此字符串也匹配,请使用零个或多个
    *
    代替一个或多个
    +


    如果希望始终匹配,并且希望**始终从字符串的开头开始,则RegExp会变成这样

    regEx.Pattern = "(\S+)(?=\s)"
    
    regEx.Pattern = "^(\S*)(?=\s|$)"
    
    在哪里

    • ^
      匹配字符串的开头
    • foo |$
      匹配
      foo
      或字符串末尾

    谢谢。这是有效的,除了它不额外\而且(\S+)(=\S)足够。我认为没有必要跳过反斜杠,也不正确!使用Microsoft VBScript Regular Expressions 5.5库,您的模式只能使用单个反斜杠。由于它们是以下
    S
    各自
    S
    的转义字符,因此将它们加倍可以有效地转义反斜杠,从而使文本
    \S
    \S
    保留在模式中。相反,您希望它们分别代表空格和非空格。这样更好!另外,对于任何想知道它是如何工作的人来说,
    ?=
    先行
    符号,这意味着您可以指定模式后面的内容,而不必将其作为匹配的一部分。