正则表达式仅返回1个匹配项

天娜乌鸦

我的VBA函数应采用一个字符串来引用一系列单位(例如"WWW1-5"),然后返回另一个字符串。

我想将参数放在逗号分隔的字符串中,因此"WWW1-5"应成为"WWW1, WWW2, WWW3, WWW4, WWW5".

并非总是一个数字。例如,我可能需要分开"XXX11-18"或类似的东西。

我从没使用过正则表达式,但是一直在尝试不同的方法来完成这项工作,而且似乎只能找到1个匹配项而不是3个匹配项。

有任何想法吗?这是我的代码:

Private Function split_group(ByVal group As String) As String   
    Dim re As Object
    Dim matches As Object
    Dim result As String
    Dim prefix As String
    Dim startVar As Integer
    Dim endVar As Integer
    Dim i As Integer

    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "([A-Z]+)(\d+)[-](\d+)"
    re.IgnoreCase = False
    Set matches = re.Execute(group)

    Debug.Print matches.Count

    If matches.Count <> 0 Then
        prefix = matches.Item(0)
        startVar = CInt(matches.Item(1)) 'error occurs here
        endVar = CInt(matches.Item(2))
        result = ""

        For i = startVar To endVar - 1
            result = result & prefix & i & ","
        Next i

        split_group = result & prefix & endVar
    Else
        MsgBox "There is an error with splitting a group."
        split_group = "ERROR"
    End If

End Function

我尝试设置global = true,但我意识到这不是问题。该错误实际上是在带有注释的行上发生的,但我认为是因为只有1个匹配项。

我尝试使用谷歌搜索,但是每个人的情况似乎都与我的有所不同,并且由于这是我第一次使用RE,所以我认为我对模式的理解不足以了解是否可能是问题所在。

谢谢!

天娜乌鸦

@Shai Rado的答案奏效了。但是我自己弄清楚了为什么我的原始代码无法正常工作,并且能够轻松地对其进行修改。

模式仅找到1个匹配项,因为它找到了1个完全匹配项。完全匹配是整个字符串。子比赛真的是我想要得到的。

这就是我为了使原始代码正常工作而进行的修改(要求1个完全匹配的每个子匹配):

我如何修改代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式仅返回一个匹配项

正则表达式执行仅返回第一个匹配项

当有两个匹配项时,来自 URL 的正则表达式匹配数据仅返回 1 个匹配项

C ++正则表达式仅找到1个子匹配项

正则表达式:即使有多个相同的匹配项,如何也仅返回一个匹配项?

C#中的正则表达式仅返回第一个匹配项

为什么Java正则表达式replaceAll()仅返回最后一个匹配项

仅匹配正则表达式行中的第一个匹配项

正则表达式仅匹配项

Java正则表达式仅返回单个匹配项

Findstr-仅返回正则表达式匹配项

正则表达式不返回多个匹配项

正则表达式未返回特定匹配项

正则表达式-返回重叠的匹配项

正则表达式返回所有匹配项

正则表达式仅替换一个匹配项

正则表达式仅捕获第一个匹配项

jQuery中的正则表达式仅允许一个匹配项

仅替换全局正则表达式的第一个匹配项

使用正则表达式仅抓取图案的第一个匹配项

正则表达式仅具有最后一个匹配项

如何使此正则表达式仅找到第一个匹配项

preg_match中的正则表达式,返回3个匹配项

正则表达式在两个匹配项之间返回字符串

pcregrep如何强制返回正则表达式的第一个匹配项

python正则表达式,只返回第一个匹配项

Bash grep不返回第一个正则表达式匹配项

Java 中的正则表达式——只返回最后一个匹配项

正则表达式匹配器仅返回第一个结果