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
的转义字符,因此将它们加倍可以有效地转义反斜杠,从而使文本\S
和\S
保留在模式中。相反,您希望它们分别代表空格和非空格。这样更好!另外,对于任何想知道它是如何工作的人来说,?=
是先行
符号,这意味着您可以指定模式后面的内容,而不必将其作为匹配的一部分。