Ваш заголовок предлагает использовать regex, ваше собственное решение использует string.split () , что также является причиной того, что вы возвращаете ту же строку:
expr = '1234 + 896 - 1207 + 1567 - 345'
words = word.split('-\|+') # splits only if ALL given characters are there
print(words)
Исправлено (но не то, что вы хотите):
expr = '1234 -\|+ 896 -\|+ 1207 -\|+ 1567 -\|+ 345'
words = expr.split('-\|+')
print(words)
Выход:
['1234 ', ' 896 ', ' 1207 ', ' 1567 ', ' 345']
Вот альтернативное решение без регулярного выражения:
Перебирать все символы в строке, если его число (без пробела и без + -) добавляет его во временный список. Если это + или - объедините все числа из временного списка и добавьте его в список результатов:
ops = set( "+-" )
expr = '1234 + 896 - 1207 / 1567 - 345'
# result list
numbers = []
# temporary list
num = []
for c in expr:
if c in ops:
numbers.append( ''.join(num))
numbers.append( c ) # comment this line if you want to loose operators
num = []
elif c != " ":
num.append(c)
if num:
numbers.append( ''.join(num))
print(numbers)
Выход:
['1234', '+', '896', '-', '1207/1567', '-', '345']
['1234', '896', '1207', '1567', '345'] # without numbers.append( c ) for c in ops