You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求VBA中更高效的中缀数学表达式分词方案(正则实现遇阻)

更高效的VBA中缀表达式分词方案(正则实现)

嘿,你的现有分词函数能完成任务,但确实可以通过正则表达式大幅简化逻辑并提升效率——虽然VBA自带的RegExp不支持正向后顾,但我们可以通过优先匹配长token+多类型分支匹配的思路,完美避开这个限制。

核心思路:一次性匹配所有目标Token

我们需要匹配的Token类型可以归纳为4类,正则表达式会按优先级依次匹配:

  1. 双字符运算符:<=、>=(必须优先匹配,避免被拆成单字符)
  2. 单字符运算符/分隔符:+、-、*、/、^、=、<、>、(、)、,
  3. 标识符(函数名、变量名):由字母/下划线开头,后跟字母/数字/下划线的序列
  4. 数字:整数或小数(兼容常见数值格式)

对应的正则模式为:

(<=|>=|[-+*/^=<>(),]|[A-Za-z_][A-Za-z0-9_]*|\d+(\.\d+)?)

实现代码

下面是用正则重构的分词函数,逻辑更简洁,效率更高:

' 需先引用:工具 -> 引用 -> 勾选 "Microsoft VBScript Regular Expressions 5.5"
Function TokeniseWithRegex(str As String) As String()
    Dim regex As New RegExp
    Dim matches As MatchCollection
    Dim tokenArr() As String
    Dim i As Long
    
    ' 配置正则规则
    With regex
        .Pattern = "(<=|>=|[-+*/^=<>(),]|[A-Za-z_][A-Za-z0-9_]*|\d+(\.\d+)?)"
        .Global = True ' 匹配所有符合条件的token
        .IgnoreCase = False ' 区分大小写(如需忽略可改为True)
    End With
    
    ' 执行匹配
    Set matches = regex.Execute(str)
    
    ' 将匹配结果转为字符串数组
    If matches.Count > 0 Then
        ReDim tokenArr(0 To matches.Count - 1)
        For i = 0 To matches.Count - 1
            tokenArr(i) = matches(i).Value
        Next i
    Else
        ' 空输入返回空数组
        ReDim tokenArr(0 To -1)
    End If
    
    TokeniseWithRegex = tokenArr
End Function

' 测试代码
Sub TestRegexTokenise()
    Dim tokenArray() As String
    tokenArray = TokeniseWithRegex("IF(TestValue>=0,TestValue,-TestValue)")
    
    ' 输出测试结果(可选)
    Dim i As Long
    For i = LBound(tokenArray) To UBound(tokenArray)
        Debug.Print "Token " & i + 1 & ": " & tokenArray(i)
    Next i
End Sub

优势对比

相比你现有的实现,这个正则方案有几个明显好处:

  • 逻辑更简洁:无需多次替换特殊字符、处理重复分隔符,一次性完成所有Token匹配
  • 效率更高:减少了字符串循环替换的开销,尤其适合处理长表达式
  • 扩展性更强:如果需要新增Token类型(比如支持小数、下划线变量名),只需修改正则模式即可

测试结果

运行测试代码后,你会得到和原函数完全一致的Token数组:

Token 1: IF
Token 2: (
Token 3: TestValue
Token 4: >=
Token 5: 0
Token 6: ,
Token 7: TestValue
Token 8: ,
Token 9: -
Token 10: TestValue
Token 11: )

内容的提问来源于stack exchange,提问作者Malan Kriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:58:25