Index: branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
===================================================================
--- branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 14764)
+++ branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 14765)
@@ -48,5 +48,5 @@
   /// ArgList       = Expr { ',' Expr }
   /// VarExpr       = varId OptFactorPart
-  /// OptFactorPart = [ ('=' varVal | '[' number {',' number } ']' ) ]
+  /// OptFactorPart = [ ('=' varVal | '[' ['+' | '-' ] number {',' ['+' | '-' ] number } ']' ) ]
   /// varId         =  ident | ' ident ' | " ident "
   /// varVal        =  ident | ' ident ' | " ident "
@@ -366,5 +366,5 @@
     /// ArgList       = Expr { ',' Expr }
     /// VarExpr       = varId OptFactorPart
-    /// OptFactorPart = [ ('=' varVal | '[' number {',' number } ']' ) ]
+    /// OptFactorPart = [ ('=' varVal | '[' ['+' | '-' ] number {',' ['+' | '-' ] number } ']' ) ]
     /// varId         =  ident | ' ident ' | " ident "
     /// varVal        =  ident | ' ident ' | " ident "
@@ -440,5 +440,5 @@
           } else if(tokens.Peek().TokenType == TokenType.LeftBracket) {
             // factor variable
-            var factorVariableNode = (FactorVariableTreeNode) factorVar.CreateTreeNode();
+            var factorVariableNode = (FactorVariableTreeNode)factorVar.CreateTreeNode();
             factorVariableNode.VariableName = idTok.strVal;
 
@@ -446,13 +446,26 @@
             var weights = new List<double>();
             // at least one weight is necessary
+            var sign = 1.0;
+            if(tokens.Peek().TokenType == TokenType.Operator) {
+              var opToken = tokens.Dequeue();
+              if(opToken.strVal == "+") sign = 1.0;
+              else if(opToken.strVal == "-") sign = -1.0;
+              else throw new ArgumentException();
+            }
             if(tokens.Peek().TokenType != TokenType.Number) throw new ArgumentException("number expected");
             var weightTok = tokens.Dequeue();
-            weights.Add(weightTok.doubleVal);
+            weights.Add(sign * weightTok.doubleVal);
             while(tokens.Peek().TokenType == TokenType.Comma) {
               // skip comma
               tokens.Dequeue();
+              if(tokens.Peek().TokenType == TokenType.Operator) {
+                var opToken = tokens.Dequeue();
+                if(opToken.strVal == "+") sign = 1.0;
+                else if(opToken.strVal == "-") sign = -1.0;
+                else throw new ArgumentException();
+              }
               weightTok = tokens.Dequeue();
               if(weightTok.TokenType != TokenType.Number) throw new ArgumentException("number expected");
-              weights.Add(weightTok.doubleVal);
+              weights.Add(sign * weightTok.doubleVal);
             }
             var rightBracketToken = tokens.Dequeue();
Index: branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs
===================================================================
--- branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs	(revision 14764)
+++ branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs	(revision 14765)
@@ -111,9 +111,14 @@
       Console.WriteLine(formatter.Format(parser.Parse("x[1, 2] * y [1, 2]")));
 
+      Console.WriteLine(formatter.Format(parser.Parse("x [+1.0] * y")));
+      Console.WriteLine(formatter.Format(parser.Parse("x [-1.0] * y")));
+      Console.WriteLine(formatter.Format(parser.Parse("x [-1.0, -2.0] * y [+1.0, +2.0]")));
+
       Console.WriteLine(formatter.Format(parser.Parse("x='bla' * y")));
       Console.WriteLine(formatter.Format(parser.Parse("x = 'bla'")));
       Console.WriteLine(formatter.Format(parser.Parse("x = \"bla\"")));
       Console.WriteLine(formatter.Format(parser.Parse("1.0 * x = bla")));
-      Console.WriteLine(formatter.Format(parser.Parse("1.0 * \"x\" = bla + y = \"bla2\"")));
+      Console.WriteLine(formatter.Format(parser.Parse("-1.0 * x = bla")));
+      Console.WriteLine(formatter.Format(parser.Parse("+1.0 * \"x\" = bla + y = \"bla2\"")));
     }
   }
