Regex 捕捉方程参数的正则表达式

Regex 捕捉方程参数的正则表达式,regex,vba,Regex,Vba,我有一个包含两组参数的数学表达式: 字母、数字和特殊字符的任意组合 看起来像“HUB_XX”的参数,其中XX是一个数字(一个或多个数字) 所以公式可能是这样的:(a1*((bb*HUB_1)+c)+(d*((e*HUB_1)+f))+13,56。 我的任务是首先从第一组中捕获所有参数,这意味着所有不是数学运算符(+-/*())或不是“HUB”参数(HUB_1)或不是常量(13,56)的参数。 在给定的示例中,应导致匹配:a1、bb、c、d、e、f 在下一步中,我只需要匹配看起来像HUB\u nu

我有一个包含两组参数的数学表达式:

  • 字母、数字和特殊字符的任意组合
  • 看起来像
    “HUB_XX”
    的参数,其中
    XX
    是一个数字(一个或多个数字)
  • 所以公式可能是这样的:
    (a1*((bb*HUB_1)+c)+(d*((e*HUB_1)+f))+13,56
    。 我的任务是首先从第一组中捕获所有参数,这意味着所有不是数学运算符(
    +-/*()
    )或不是
    “HUB”
    参数(
    HUB_1
    )或不是常量(
    13,56
    )的参数。 在给定的示例中,应导致匹配:
    a1、bb、c、d、e、f
    在下一步中,我只需要匹配看起来像
    HUB\u number

    第二个表达式写起来相当简单,但我正在努力解决第一个表达式。 我的工作环境是VBA(Excel,Access)


    有人能提供建议吗?提前谢谢

    此正则表达式将检索您的第一组信息:

    (?!HUB_\d+)\b[a-zA-Z][^+-\/*()]*\b
    
    请注意,匹配的参数必须以字母开头

    看这个

    编辑:如果希望能够使用希腊字符,应添加\p{greek}参数:

    (?!HUB_\d+)\b[a-zA-Z\p{Greek}][^+-\/*()]*\b
    
    请注意,您必须使用
    u
    nicode选项才能使其工作


    看看这个。

    Paul。我将检查是否可以在VBA中使用负环视。但如果一个参数是字母和数字的组合(例如a1),它仍然不会被捕获。理想情况下,只应排除“HUB_编号”,并且在您的模式中,排除从“HUB_编号”级别开始。您是否可以演示自己在解决此问题方面所做的任何努力?成功了!谢谢你,保罗!你是纯金的:)斯科特,我自己也试过解决这个问题。我最初的想法是通过使用“或”操作符组合thm来排除所有匹配模式。对于数学运算符,它是有效的([^*\\\\\\\\\^(^^^)^+^-]+)。当我尝试向模式中添加“HUB\u XX”时,问题就开始了。首先,它将所有字母分开处理(因此无法在其他任何地方使用H。此外,它排除了所有其他数字(也包括附加到参数的数字)。因此,模式[^*\\\\\\\\\\\\\^(^^^)^+^-^^^ HUB\UD+]+不起作用(即使没有排除它)。基本上,我是盲目地试图转换那个模式,但结果我一事无成。再次感谢保罗。还有一个问题。我怎样才能包含特殊字符(α,β,Ω…)来匹配这个模式?参数可以是这样的。因此,它可以是“β”而不是“b”@MaciekDziendziel好的,很高兴知道!我编辑了我的答案来添加希腊字符匹配。我用p{L}来匹配所有字母表中的字母。这很有效!