Разделение строк на основе регулярных выражений - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть математическое выражение в строковом формате. Который содержит только операторы «+» или «-». Я должен разделить строку на основе операторов.

expr = '1234 + 896 - 1207 + 1567 - 345'
words = word.split('-\|+')
print(words)

Я пробовал это, но он дает оригинальную строку как есть.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Используйте скобки группы, если вы хотите сохранить операторы:

re.split(r"\s*([+-])\s*",expr)
Out: ['1234', '+', '896', '-', '1207', '+', '1567', '-', '345']
0 голосов
/ 03 ноября 2018

Ваш заголовок предлагает использовать 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
0 голосов
/ 03 ноября 2018

Используйте re.split для разделения на несколько разделителей:

import re

word = '1234 + 896 - 1207 + 1567 - 345'
words = re.split(r' - | \+ ', word)
print(words)

# ['1234 ', '896', '1207', '1567', '345']
...