C# 带有加法(+;)和减法(-)数学运算符的单个数或组的正则表达式

C# 带有加法(+;)和减法(-)数学运算符的单个数或组的正则表达式,c#,regex,numeric,addition,subtraction,C#,Regex,Numeric,Addition,Subtraction,我需要创建一个只接受数字和加减字符的正则表达式 我用这种方式定义了单个数字和组模式 ([1-9][0-9]*) 我无法添加加减字符的定义 我希望大家都同意类似的例子 例如:12+1-23-9+10要实现验证,我建议您标记它,但首先通过查找操作员来组织它,然后是数字。标记化后,您可以在代码中验证所有操作是否有效,以及是否累积了结果总数 示例 var data = "12 + 1 - 23 - 9 + 10"; var pattern = @"(?<Operator>[+-]*)\s*

我需要创建一个只接受数字和加减字符的正则表达式

我用这种方式定义了单个数字和组模式
([1-9][0-9]*)

我无法添加加减字符的定义

我希望大家都同意类似的例子


例如:
12+1-23-9+10

要实现验证,我建议您标记它,但首先通过查找操作员来组织它,然后是数字。标记化后,您可以在代码中验证所有操作是否有效,以及是否累积了结果总数

示例

var data = "12 + 1 - 23 - 9 + 10";

var pattern = @"(?<Operator>[+-]*)\s*(?<Number>\d+)";

var tokens =
   Regex.Matches(data, pattern)
        .OfType<Match>()
        .Select (mt => new
             {
                 Operator = string.IsNullOrEmpty(mt.Groups["Operator"].Value)
                                  ? "+"   // Default to '+' if not found. (First Number)
                                  : mt.Groups["Operator"].Value,
                 Value    = mt.Groups["Number"].Value
             });
累积的结果

var data = "12 + 1 - 23 - 9 + 10";

var pattern = @"(?<Operator>[+-]*)\s*(?<Number>\d+)";

var tokens =
   Regex.Matches(data, pattern)
        .OfType<Match>()
        .Select (mt => new
             {
                 Operator = string.IsNullOrEmpty(mt.Groups["Operator"].Value)
                                  ? "+"   // Default to '+' if not found. (First Number)
                                  : mt.Groups["Operator"].Value,
                 Value    = mt.Groups["Number"].Value
             });

注意累计时,减去
-3
使其成为
+3
;-)


为完整起见,这里是在操作员对以下第二个
Select
进行签名确定之前第一个
Select
的快照:


这表明两个零表示两个负数,需要将其转换为正数。

为了实现验证,我建议您对其进行标记,但首先查找运算符,然后是数字。标记化后,您可以在代码中验证所有操作是否有效,以及是否累积了结果总数

示例

var data = "12 + 1 - 23 - 9 + 10";

var pattern = @"(?<Operator>[+-]*)\s*(?<Number>\d+)";

var tokens =
   Regex.Matches(data, pattern)
        .OfType<Match>()
        .Select (mt => new
             {
                 Operator = string.IsNullOrEmpty(mt.Groups["Operator"].Value)
                                  ? "+"   // Default to '+' if not found. (First Number)
                                  : mt.Groups["Operator"].Value,
                 Value    = mt.Groups["Number"].Value
             });
累积的结果

var data = "12 + 1 - 23 - 9 + 10";

var pattern = @"(?<Operator>[+-]*)\s*(?<Number>\d+)";

var tokens =
   Regex.Matches(data, pattern)
        .OfType<Match>()
        .Select (mt => new
             {
                 Operator = string.IsNullOrEmpty(mt.Groups["Operator"].Value)
                                  ? "+"   // Default to '+' if not found. (First Number)
                                  : mt.Groups["Operator"].Value,
                 Value    = mt.Groups["Number"].Value
             });

注意累计时,减去
-3
使其成为
+3
;-)


为完整起见,这里是在操作员对以下第二个
Select
进行签名确定之前第一个
Select
的快照:


这表明两个零表示两个负数,需要转换成加号。

^\d+(?:\s*[+-]\s*\d+*$
^\d+(?:\s*[+-]\s*\d+*$
注意,
[1-9][0-9]*
并不等同于
\d+
:第一个要求你从非零开始……注意
[1-9][0-9]*
并不等同于
\d+
:第一个命令强制您从非零开始。。。