Как я могу разделить два символа в элементе списка в python?

Я пытаюсь создать анализатор строк, который может разделить математическое уравнение на разные части (числа и операторы). Прямо сейчас я пытаюсь создать список для разделения между разными частями.

Ex: ["123", "+", "123"]

Однако я пытаюсь сделать это таким образом, чтобы мне не требовалось писать пробелы во входных данных. Вместо того, чтобы вводить: «123 + 123», я хочу написать: «123+123». Как мне разделить строку между знаком сложения и числом и добавить ее в список?

Я знаю, что если я добавлю пробел между «123 + 123», я смогу его разделить, но моя цель — разделить его без пробелов; просто один большой блок текста.

До сих пор я пытался отделить его от знака добавления, но это просто удаляет его, и у меня остается ["123", "123"]

equation = input("Equation: ")

>> Equation: 123+123

mylist = []

l.append(equation)

for x in mylist:
    print(x.split("+"))

>> ["123", "123"]

person Bottle    schedule 22.06.2019    source источник
comment
Добро пожаловать в СО! Насколько сложны ваши выражения? Разрешены ли вычитание, умножение и деление? Десятичные? Ведущие нули? Перечислите все правила, с которыми вы ожидаете столкнуться. Если выражения включают вложение, используйте это, в противном случае re.findall(r"\d+|\D", s) поможет вам начать работу.   -  person ggorlen    schedule 22.06.2019


Ответы (2)


используя re.split, вы можете использовать группу захвата, чтобы сохранить разделитель и осмотры, чтобы утверждать, что слева, а что справа цифра:

(?<=\d)([+])(?=\d)

Пояснение

  • (?<=\d) Позитивный просмотр назад, утверждение, что то, что находится непосредственно слева, является цифрой
  • ([+]) Сфотографируйте + в группе
  • (?=\d) Положительный просмотр вперед, утверждение, что то, что находится непосредственно слева, является цифрой

демонстрация регулярных выражений | демонстрация Python

import re

s = "123+123"
s = re.compile("(?<=\d)([+])(?=\d)").split(s)
print(s)

Результат

['123', '+', '123']
person The fourth bird    schedule 22.06.2019

Это сделает то, что вы хотите.

import re

input_string = '123+123'

output_string = re.split('(\\+)', input_string)  # additionally can be written r'(\+)'

print(output_string)

Выход ['123', '+', '123']

Поведение re.split() описано здесь, в документации https://docs.python.org/3/library/re.html#re.split. В основном использование круглых скобок здесь создает группу захвата, а текстовый шаблон возвращается как часть списка.

person probat    schedule 22.06.2019