【发布时间】:2014-09-23 21:36:03
【问题描述】:
我正在尝试制作一个正则表达式,用于从方程式中提取数值常量和运算符。
例如,给定输入 X_1 + 1234 * 5678 + 2(其中 X_1 不是常量,因此被忽略),我想提取 1234 * 5678 + 2。
我有一个适用于上述情况的正则表达式,但是当第一个数字为负数时它会中断。
这是我当前的正则表达式(为清楚起见添加了空格):
\b( (?:-?\d+) (?:\s*[\*\+]\s* (?:-?\d+))+ )\b
但是,如果 first 数字常量为负数,则将跳过减号。
例如,输入为X_2 * -128 + 18 * 3,表达式提取128 + 18 * 3,从128 中删除-。
我认为问题在于引导词边界锚点,但如果没有它,则包含来自 X_2 的 2,这是不正确的。如何正确包含负数但不会意外包含变量?
编辑:为简单起见,“变量”是指任何不是数字常量的东西。 “数值常数”是正整数或负整数值。在我上面的表达式中,它们与 (?: -?\d+) 匹配。
【问题讨论】:
-
这是我当前表达的一个例子:regex101.com/r/bP4zG0/2
-
您能再发表一些意见吗?尤其是在
X_1使用不同名称的地方。我们需要查看变量的不同模式 -
你试过正则表达式调试器吗? debuggex.com