J'essaie de faire correspondre des opérations mathématiques à l'aide d'une correspondance dans scala. Ainsi, la fonction sera en mesure de faire correspondre une chaîne comme « 5 + 2 » ou « log10 » ou « 10^5 », etc. Cependant le match ne garde pour les différents types d'expressionsCorrespondance des opérations mathématiques dans scala à l'aide de regex
def isValid(expression:String):Boolean={
val number = """((\-|\+)?[0-9]+\.?[0-9])*"""
val operation = """([\+,\-,*,/,C,P])"""
val functions = """(log|ln|sin|cos|tan|arc sin|arc cos|arc tan|sec|csc|cot)"""
val powers = """\^"""+number
val arithmeticExpression = (number + operation + number).r
val functionExpression = (functions + number).r
val powerOperation = (number + powers).r
val stringToTest: Regex = ("""(""" +arithmeticExpression+"""|"""+functionExpression+"""|"""+powerOperation+""")""").r
expression match {
case arithmeticExpression(s) => true
case functionExpression(s) => true
case powerOperation(s)=>true
case _ => false
}
}
println(isValid("1+4").toString)
Cependant si je correspondance pour une expression générale je reçois le résultat attendu:
def isValid(expression:String):Boolean={
val number = """(\-|\+)?[0-9]+\.?[0-9]*"""
val operation = """[\+,\-,*,/,C,P]"""
val functions = """(log|ln|sin|cos|tan|arc sin|arc cos|arc tan|sec|csc|cot)"""
val power = """\^"""+number
val arithmeticExpression = number+operation+number
val functionExpression = functions+number
val powerExpression = number+power
val validExpression = """(""" +arithmeticExpression+"""|"""+functionExpression+"""|"""+powerExpression+""")"""
validExpression.r.findFirstIn(expression) match {
case Some(`expression`) => true
case None => false
}
Il existe des sites Web pour essayer des expressions rationnelles, qui sont difficiles à regarder et à composer. Ce serait bien s'il y avait une bibliothèque que vous pouviez charger dans le REPL pour séparer les expressions régulières, etc. Aussi, utilisez 'case r (_ *) =>' pour ignorer les groupes correspondants si vous n'êtes pas intéressé par eux. –
Oui, la parenthèse a foiré l'expression. Merci! – Dguye