Извлечь только постоянное значение в линейном уравнении - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь извлечь только постоянное значение, то есть "c -значение" со знаком из линейного уравнения типа ax+by+c.
Примечание: - Линейное уравнение вводится как строка.
для Например: - 2x+3y+4 Выход = + 4
или 2x+3y-4 Выход = -4
или -3+2y+1x Выход = -3
или 2+6x+1y Выход = 2
или 4y+3-5x Выход = + 3
В каждом из приведенных выше примеров я хочу только значение c со знаком, то есть константой значение.

Я пробовал много кодов регулярных выражений. Но не могу найти никакого общего решения для извлечения значения константы. Ниже приведено лучшее, что я могу получить в python 3, но во многих случаях это также не работает для меня.

conatsant_c = re.complie(r'([+-]?[0-9]\d*)([^x|^y])')

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Вы можете использовать это регулярное выражение, которое использует отрицательный взгляд, чтобы утверждать, что после числа нет буквы:

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

Демонстрация по регулярному выражению regex101

Это будет работать также с числами с плавающей запятой.

In 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
1 голос
/ 30 апреля 2020

let secondText = "1.23x+4.56y-7.89";
let cKoef = secondText.match(/[+|-]?\d+(?:\.\d+)+(?!\w)/)[0];

console.log(cKoef)

let mathText = "2222x+3333y+4444";
let cKoef = mathText.match(/([\+|\-]{0,1}[\d*])+(?![\w])/)[0]

console.log(cKoef);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...