Javascript 仅提取线性方程中的常数值

Javascript 仅提取线性方程中的常数值,javascript,python,c#,regex,Javascript,Python,C#,Regex,我试图仅从类型为ax+by+c的线性方程中提取常量值,即带符号的“c值” 注:-线性方程作为字符串输入。 例如:-2x+3y+4Output=+4 或2x+3y-4输出=-4 或-3+2y+1x输出=-3 或2+6x+1y输出=2 或4y+3-5x输出=+3 在上面的每个例子中,我只想要带符号的c值,即常量值 我尝试了许多正则表达式模式代码。但无法得到任何一般解来提取常量值 下面是我在Python3中能得到的最好的结果,但在很多情况下它也不适合我 conatsant_c = re.complie

我试图仅从类型为
ax+by+c
的线性方程中提取常量值,即带符号的“c值”
注:-线性方程作为字符串输入。
例如:-
2x+3y+4
Output=+4
2x+3y-4
输出=-4
-3+2y+1x
输出=-3
2+6x+1y
输出=2
4y+3-5x
输出=+3
在上面的每个例子中,我只想要带符号的c值,即常量值

我尝试了许多正则表达式模式代码。但无法得到任何一般解来提取常量值 下面是我在Python3中能得到的最好的结果,但在很多情况下它也不适合我

conatsant_c = re.complie(r'([+-]?[0-9]\d*)([^x|^y])')
let secondText=“1.23x+4.56y-7.89”;
让cKoef=secondText.match(/[+\124;-])?\ d+(?:\。\d+(?!\w)/)[0];
console.log(cKoef)
let secondText=“1.23x+4.56y-7.89”;
让cKoef=secondText.match(/[+\124;-])?\ d+(?:\。\d+(?!\w)/)[0];

console.log(cKoef)
您可以使用这个正则表达式,它使用一个负的前瞻来断言数字后面没有字母:

-?\d+(?:\.\d+)?(?![\d.]*[a-z])

这也适用于浮点数

在python中:

import re

strs = ['21x+3y+45',
        '2x+3y-4.2',
        '-3.4+12y+1x',
        '2+6x+41.2y',
        '4y+13.1-5x'
        ]

for s in strs:
    const = re.search(r'-?\d+(?:\.\d+)?(?![\d.]*[a-z])', s)
    print(const.group(0))
输出:

45
-4.2
-3.4
2
13.1

您可以使用这个正则表达式,它使用一个负的前向断言数字后面没有字母:

-?\d+(?:\.\d+)?(?![\d.]*[a-z])

这也适用于浮点数

在python中:

import re

strs = ['21x+3y+45',
        '2x+3y-4.2',
        '-3.4+12y+1x',
        '2+6x+41.2y',
        '4y+13.1-5x'
        ]

for s in strs:
    const = re.search(r'-?\d+(?:\.\d+)?(?![\d.]*[a-z])', s)
    print(const.group(0))
输出:

45
-4.2
-3.4
2
13.1


首先,我建议您将
[0-9]\d*
替换为更简洁的
[0-9]+
\d+
,以检查一个或多个数字。其次,您可能希望第二个字符类仅为
[^xy]
,因为这将检查所有不是
x
y
的字符。您可以使用正则表达式
-?\d+(?![a-z])
(?![a-z])
作为负前瞻@CarySwoveland失败,例如“11x+3y+3”,它只在开始时选择除一位以外的所有数字。怎么样
.match(/[\-+]?\d+(?=[\-+].$)/)[0]
?@CarySwoveland是,但仅适用于本例。不适用于2x+3y-4+Y5感谢使用
-?\d+(?![a-z])
对我有效…首先,我建议您将
[0-9]\d*
替换为更简洁的
[0-9]+
\d+
,以检查一个或多个数字。其次,您可能希望第二个字符类仅为
[^xy]
,因为这将检查所有不是
x
y
的字符。您可以使用正则表达式
-?\d+(?![a-z])
(?![a-z])
作为负前瞻@CarySwoveland失败,例如“11x+3y+3”,它只在开始时选择除一位以外的所有数字。怎么样
.match(/[\-+]?\d+(?=[\-+].$)/)[0]
?@CarySwoveland是,但仅适用于本例。没有为2x+3y-4+Y5工作感谢使用
-?\d+(?![a-z])
为我工作了…
-?[\+\124\-]{0,1}\d+(?:\.\d+(?![\d.]*[a-z])
因此将是最重要的accurate@Andran捕获
+
是多余的,除非前面有
-
符号,否则数字总是正数。您的建议还允许使用无效的
--
。而
[\+\124\-]
允许字符串中存在一个
,这绝对无效。您可以使用
(?![\d.]*
@Sameer
-?\d+(?:\.\d+)(?=x)
测试我的回答是否正确:
-?[\+\124\.-]{0,1}\d+(?:\.\d+)(?![\d.*[a-z])
因此将是最重要的accurate@Andran捕获
+
是多余的,除非前面有
-
符号,否则数字总是正数。此外,您的建议允许
-
不是有效数字。和
[\+\124;\-]
允许字符串中有一个
,这绝对是无效的。你可以用
(?![\d.]*
@Sameer
-?\d+(?:\.\d+)(?=x)
来测试我的回答是否正确。注意
[\+\124\-]
[+\124-]
相同,尽管我希望你想要
[+]
(避免匹配
-
)另外,
{0,1}
通常是写
[\d*]
\d*
一样,
[\w]
\w
@CarySwoveland
[+\124;-]?\ d+(?:\.\d+(?!\w)
)正如我所说的,我认为你不想匹配
。如果你修正了这个问题并添加了
-?
,你会得到我在上面的评论中所建议的,但我错了@尼克在他的回答中修正了它。注意
[\+\-]
[++-]
是一样的,尽管我希望你想要
[+-]
(避免匹配
'.'
)。另外,
{0,1}
通常是写
[\d*]
\d*
相同,
[\w]
\w
@CarySwoveland
[+\124;-]?\ d+(?:\.\d+(?!\w)
相同)正如我所说,我认为您不想匹配
|
。如果你修正了这个问题并添加了
-?
,你会得到我在上面的评论中所建议的,但我错了@尼克在回答中纠正了这一点。