#python #regex
#python #регулярное выражение
Вопрос:
Я пытаюсь проанализировать коэффициент «a» в квадратном уравнении (ax ^ 2 bx c). Однако длина коэффициента может варьироваться. Например, вот некоторые из предполагаемых результатов:
input: 5x^2 3x 4
output: 5
input: 12x^2 2x - 6
output: 12
Число также может быть в середине уравнения.
input: 2x - 3x^2 4
output: 3
Как мне получить весь текст перед «x ^ 2», пока они не станут пробелом?
Я пытался использовать функцию split ():
a = equation.split("x^2")
a = a[0]
но это не сработало бы в третьем примере
Комментарии:
1. Пожалуйста, расскажите нам, что вы пробовали
2. Почему бы не использовать
split
?3. @rootkonda Я отредактировал свой вопрос
Ответ №1:
Вот и все
[- ]?d (.d )?(?=x^)
Протестируйте это здесь
Имейте в виду, что это регулярное выражение будет соответствовать только простым случаям, например, оно не будет соответствовать 2E3.
Комментарии:
1. По большей части это работает, но не включает или — в результат. Например: ввод: 2x — 3x ^ 2 вывод: 3
2. Вы можете добавить необязательный пробел между оператором и числом :
[- ]?s?d (.d )?(?=x^)
Ответ №2:
Совет: используйте RegEx 101 для тестирования вашего шаблона:
pattern = re.compile(r'([ -d.]*)x^2')
tests = [
'5x^2 3x 4',
'12x^2 2x - 6',
'2x - 3x^2 4',
'x^2 - 2x 1',
'-x^2 6x - 9'
]
for t in tests:
m = pattern.search(t)
text = m.group(1)
if text == '':
coeff = 1
elif text == '-':
coeff = -1
else:
coeff = float(text)
print(coeff)
С принтами:
5.0
12.0
3.0
1
-1
Ответ №3:
Я увидел, что использование split
тоже является вариантом из вопроса. Итак, вы хотите получить весь текст перед числами с помощью ^
оператора. Это будет работать только для этих трех примеров:
x = '5x^2 3x 4'
y = '12x^2 2x - 6'
z = '2x - 3x^2 4'
print(x.split()[0])
print(y.split()[0])
print(z.split(' ')[0])
# split default argument is space
Вывод
5x^2
12x^2
2x - 3x^2
И если вы хотите использовать только числа с помощью оператора ^ без предшествующего всего текста, измените z.split(' ')[0]
на:
print(z.split()[2])
# 3x^2