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+
:第一个命令强制您从非零开始。。。