【发布时间】:2020-08-14 04:50:57
【问题描述】:
我试图从ax+by+c 类型的线性方程中仅提取常数值,即带有符号的“c 值”。
注意:- 线性方程作为字符串输入。
例如:- 2x+3y+4 输出 = +4
或 2x+3y-4 输出 = -4
或 -3+2y+1x 输出 = -3
或 2+6x+1yOutput = 2
或 4y+3-5xOutput = +3
在上面的每个示例中,我只想要带符号的 c 值,即常量值。
我尝试了许多正则表达式模式代码。但无法获得任何通用解决方案来提取常数值 以下是我在 python 3 中可以得到的最好的,但在很多情况下它也不适合我。
conatsant_c = re.complie(r'([+-]?[0-9]\d*)([^x|^y])')
【问题讨论】:
-
首先,我建议您将
[0-9]\d*替换为更简洁的[0-9]+或\d+,以检查一个或多个数字。其次,您可能希望第二个字符类只是[^xy],因为这将检查所有不是x和y的字符。 -
您可以使用正则表达式
-?\d+(?![a-z])、(?![a-z])作为负前瞻。 Demo -
@CarySwoveland 失败例如“11x+3y+3”,它只在开始时选择除一位之外的所有数字。
.match(/[\-+]?\d+(?=[\-+]|$)/)[0]怎么样? -
@CarySwoveland 是的,但仅适用于此示例。不适用于 2x+3y-4+y5
-
感谢使用
-?\d+(?![a-z])为我工作...
标签: javascript python c# regex