2013-10-03 4 views
0

Je suis novice dans l'utilisation de l'expression régulière et j'ai de la difficulté à analyser une chaîne. Je travaille sur l'analyse d'une formule donnée sous la forme d'une chaîne en utilisant une expression régulière.C# Scinder la représentation sous forme de chaîne d'une formule

Actuellement, mon expression régulière est:

string[] formula_substrings = Regex.Split(formula, "(\\()|(\\))|(-)|(\\+)|(\\*)|(/)|(\\s+)") 

L'un des cas de test que cette expression régulière ne parvient pas à gérer est lorsque la formule a des exposants.

Exemple:

Formula = "1e-2 + 5.0" 

Ma sortie désirée est

["1e-2", "+", "5.0"] 

mais je reçois

["1e", "-", "2", "+", "5.0"]. 

J'ai essayé de changer l'expression régulière pour vous assurer que le caractère devant la signe moins ins't an e:

string[] formula_substrings = Regex.Split(formula, "(\\()|(\\))|((^e)-)|(\\+)|(\\*)|(/)|(\\s+)") 

Et cela cause des problèmes lorsque l'expression est

Formula = "5+5-2" 

Il donnera la sortie:

["5", "+", "5-2"] 

Quand ma sortie désirée est

["5", "+", "5", "-", "2"] 

Merci à l'avance pour l'aide!

+0

vous aussi sur gourmand (*) et non gourmand (*?) –

Répondre

3

Vous pouvez utiliser .. lookbehind

Regex.Split(formula, @"(\(|\)|(?<!e|E)-|(?<!e|E)\+|\*|/|\s+)") 
           -------- -------- 
Questions connexes