vba regex - 在空格之前获取非空格字符

时间:2016-04-30 12:54:52

标签: 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

我希望extractStr有-X(第一个空格之前的任何东西),但我没有得到它。

1 个答案:

答案 0 :(得分:3)

模式字符串"(\S*)[^\s*]"

存在一些问题
  1. 字符串文字中的非转义反斜杠在这种特殊语言中,反斜杠转义是不必要的(感谢Leviathan [1]
  2. \S[^\s]是一回事
  3. [foo*]表示匹配fo*
  4. 你可能想要这样的东西

    regEx.Pattern = "(\S+)(?=\s)"
    

    这意味着

    • (\S+)贪婪地匹配一个或多个非空格(并记住匹配),直到...
    • (?=\s)下一个字符是空白

    请注意," "之类的字符串不匹配,如果您希望匹配,请使用零或更多*代替 - 或者更多+

    如果您希望始终匹配,并且您希望**始终从 String 的开头开始,则 RegExp 会变成类似此

    regEx.Pattern = "^(\S*)(?=\s|$)"
    

    其中

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