Lines=["1x+1y+0","1x-1y+0","-1ax+0y-3","0x+1y-0.5"]
Я пытаюсь найти перехват, скажем, для уравнения № 3, т.е. "-1ax+0y-3"
re.findall('[+-][\w]*[^XxYy]',Lines[2])
но это дает мне
['-1ax+', '-3']
Я ожидал только -3
Я просто хочу извлечь перехват здесь. Никаких математических вещей
Так? (?<=[xyXY])[+-]?\d+(?:\.\d+)?$
regex101.com/r/enDp4h/1
[+-]?\w*?[^XxYy](?=\+|-|$)
даст вам ожидаемый результат.
[+-]?
делает знак необязательным, поэтому вы также можете сопоставить положительное значение в начале строки.
*?
делает его нежадным и
(?=\+|-|$)
— это просмотр вперед, чтобы проверить, есть ли +, - или конец строки после вашего значения.
Если вы просто хотите сопоставить числа: [+-]?[0-9\.]+?[^XxYy](?=\+|-|$)
[0-9\.]
будет соответствовать числам или десятичной точке!
[\w] : Может ли это быть просто так: \w
Если перехват равен 0,5, то он не совпадает. Я пробовал intercept = re.findall(r'([+-]?([0-9]*[.])?[0-9]+)(?![xy])',line) # Intercept. Это дает такой результат ('-0.5', '0.')
@AmolGupta Попробуйте мое второе регулярное выражение! Он также будет соответствовать десятичной точке.
Вы можете использовать
re.findall(r'-?\b\d+(?:\.\d+)?\b', Lines[2])
Посмотрите демонстрацию регулярного выражения . Подробности:
-?
- необязательный -
\b
- граница слова, склеенные буквы не допускаются\d+
- одна или несколько цифр(?:\.\d+)?
- необязательная дробная часть\b
- граница слова.Вы могли бы использовать
(?<=[xyXY])[+-]?\d+(?:\.\d+)?$
Объяснение
(?<=[xyXY])
Положительный просмотр назад, утверждение x или y слева[+-]?
При желании найдите +
или -
\d+(?:\.\d+)?
Сопоставьте цифры с необязательной десятичной частью$
Конец строкиДемонстрация регулярных выражений
import re
Lines = ["1x+1y+0","1x-1y+0","-1ax+0y-3","0x+1y-0.5"]
print(re.findall('(?<=[xyXY])[+-]?\d+(?:\.\d+)?$', Lines[2]))
Выход
['-3']
В общем случае здесь вам может понадобиться написать парсер выражений. Regex не может заниматься математикой, он может только извлекать данные.