Как я могу разделить между двумя символами в элементе списка в Python? - PullRequest
1 голос
/ 22 июня 2019

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

Пример: ["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"]

Ответы [ 2 ]

1 голос
/ 22 июня 2019

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

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

Объяснение

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

Regex demo | Демо Python

import re

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

Результат

['123', '+', '123']
0 голосов
/ 22 июня 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. В основном использование круглых скобок позволяет создать группу захвата, а текстовый шаблон возвращается как часть списка.

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