2017-04-20 1 views
0

Je dois diviser une chaîne en utilisant plusieurs délimiteurs qui sont stockés dans un dictionnaire python.Chaîne fractionnée avec plusieurs délimiteurs stockés dans un dictionnaire

Par exemple, ceci est mon dictionnaire avec les délimiteurs:

import operator 

ops = { 
    "+": operator.add, 
    "-": operator.sub, 
    "*": operator.mul, 
    "/": operator.truediv 
} 

Et ceci est un exemple de chaîne:

mystring = "2 * 3 + 4 + 5/(9 + 5)" 

Le résultat devrait être:

result = ['2', '3', '4', '5', '(9', '5)'] 

Il est possible de le faire en utilisant uniquement les variables «mystring» et «ops» et certaines fonctions sans hardcode tout le délimiter rs chaînes comme arguments de fonction?

+0

Comme point de départ, vous pouvez collecter des clés en utilisant 'ops.keys()'. – spectras

Répondre

3

Si vous voulez simplement partager sur un caractère qui n'est pas une utilisation du numéro:

import re 
a = "(20 * 20/19 - 29) ** 2" 
out_list = re.findall(r"[\d']+", a) 

Si vous voulez faire le calcul réel puis dire:

eval("(20 * 20/19 - 29) ** 2") 
1

Vous pourriez utiliser un RegExp pour résoudre ce cas pour vous.

r = re.compile('\(?\d+\)?') # possible parenthesis surrounding an integer 
r.findall(mystring) 

> ['2', '3', '4', '5', '(9', '5)'] 
0

cela pourrait aider :

import operator 

ops = {"+": operator.add, 
     "-": operator.sub, 
     "*": operator.mul, 
     "/": operator.truediv 
     } 

myString = "2 * 3 + 4 + 5/(9 + 5)" 


def getSubStrings(myInputString, delimiters): 
    allSubStrings = [myInputString] 

    tempList = [] 
    for eachKey in delimiters.keys(): 
     for eachSubString in allSubStrings: 
      tempList += eachSubString.split(eachKey) 
     allSubStrings = tempList 
     tempList = [] 

    allSubStrings = [eachSubString.strip() for eachSubString in allSubStrings] 

    return allSubStrings 


print(getSubStrings(myString, ops)) 

et le a nswer pour la chaîne donnée est:

['2', '3', '4', '5', '(9', '5)']