我有字符串格式的数学表达式。其中仅包含“ +”或“-”运算符。我必须根据运算符来分割字符串。
expr = '1234 + 896 - 1207 + 1567 - 345'
words = word.split('-\|+')
print(words)
我已经尝试过了,但是它原样给出了原始字符串。
答案 0 :(得分:1)
使用re.split
分割多个定界符:
import re
word = '1234 + 896 - 1207 + 1567 - 345'
words = re.split(r' - | \+ ', word)
print(words)
# ['1234 ', '896', '1207', '1567', '345']
答案 1 :(得分:0)
如果要保留运算符,请使用组括号:
re.split(r"\s*([+-])\s*",expr)
Out: ['1234', '+', '896', '-', '1207', '+', '1567', '-', '345']
答案 2 :(得分:0)
您的标题建议使用正则表达式,您自己的解决方案使用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