0

我需要从字符串中提取前 3 到 13 个字符,从行首开始到第一次遇到空格时结束。

以下代码我无法开始工作。我经常收到“无效程序”错误。更改模式有时会使错误消失,但它永远不会导致我需要的匹配。

请帮忙。

编辑:我发现这个模式“/[^]*/”应该做我想做的事(我认为),但是现在当我执行代码时,我在 strOut = match.SubMatches(0) 行出现错误。知道为什么吗?

    ' Set the pattern to find the data we would like to test; 
re_Name.Pattern = "^xe\-1/1/1"
re_Name.IgnoreCase = True
re_Name.Multiline = True

vLines = Split(strNames, vbcrlf)
For Each strLine in vLines
Set matches = re_Name.Execute(strLine)
    For Each match in matches
        strOut = match.SubMatches(0)
        MsgBox strOut
        Next
    Next

我正在搜索的示例:

xe-0/1/1
xe-0/3/2.0
ge-11/2/1
ae0
ae0.3156

在上下文中可能会喜欢的示例:

xe-0/0/0        up    up   xxxxxxxxxxJxx0/0xToxBBxxx1 x;
ae0.202         up    up   ;xxxxxx1;xxxxxxxxixxxxx 
ge-11/3/0.0     up    down Rxxxxxxx RESERVEDing
4

2 回答 2

2

我认为strOut = match.SubMatches(0)应该是strOut = match.Value因为您没有捕获任何子匹配,因为您没有使用方括号来捕获任何内容。

如果您只想将字符匹配到第一个空格,您可以使用

 re_Name.Pattern = "^\S+"

\S匹配任何非空格字符。

于 2013-01-30T18:57:47.837 回答
1

您的正则表达式缺少捕获 () 以使子匹配成为可能。在空间上使用拆分可能是一种风险较小的方法。

于 2013-01-30T18:58:26.150 回答