C# 匹配范围的正则表达式
我有以下问题:C# 匹配范围的正则表达式,c#,.net,regex,C#,.net,Regex,我有以下问题: 字符串将通过正则表达式进行验证 字符串包含由分号分隔的范围或单个值,例如100-200;10;2300-3400;34; 每个数字的最大值为99999 字符串中不允许有字母 到目前为止,我所拥有的: ^([0-9]{1,5}[-][0-9]{1,5}[;])? ^([0-9]{1,5}[;])? ([0-9]{1,5}[-][0-9]{1,5}[;])?([0-9]{1,5}[;])? ([0-9]{1,5}[-][0-9]{1,5}[;])*$? ([0-9]{1,5}[;
- 字符串将通过正则表达式进行验证李>
- 字符串包含由分号分隔的范围或单个值,例如
100-200;10;2300-3400;34;代码>
- 每个数字的最大值为
99999
- 字符串中不允许有字母
^([0-9]{1,5}[-][0-9]{1,5}[;])? ^([0-9]{1,5}[;])? ([0-9]{1,5}[-][0-9]{1,5}[;])?([0-9]{1,5}[;])? ([0-9]{1,5}[-][0-9]{1,5}[;])*$? ([0-9]{1,5}[;])*$?
因此,我的正则表达式由三种可选的组类型组成:
- 开头:
^([0-9]{1,5}[-][0-9]{1,5}[;])^([0-9]{1,5}[;])?
- 中间:
([0-9]{1,5}[-][0-9]{1,5}[;])?([0-9]{1,5}[;])?
- 结束:
([0-9]{1,5}[-][0-9]{1,5}[;])*$?([0-9]{1,5}[;])*$?
- 开头:
^(\d{1,5}\-\d{1,5};)^(\d{1,5};)?
- 中间:
(\d{1,5}\-\d{1,5};)?(\d{1,5};)?
- 结束:
(\d{1,5}\-\d{1,5};)*$?(\d{1,5};)*$?
\b(?<FirstNum>[1-9][0-9]{1,4})(-(?<SecondNum>[1-9][0-9]{1,4}))?;
并通过以下方式进行验证:
Regex regex = new Regex("[A-Za-z]");
if (regex.IsMatch(inputString))
{
//Invalid string
}
尽管正则表达式在以后实际需要使用范围时非常有用,但最好结合使用
string.Split
和int.TryParse
:
string input = "100-200;10;2300-3400;34;";
string[] ranges = input.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string range in ranges)
{
string[] numbers = range.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string number in numbers)
{
int parsedNumber;
if (!Int32.TryParse(number, out parsedNumber))
{
//Invalid input
break; //Or return false...
}
//Use parsedNumber here
}
}
负数
-10-10
范围和降序范围200-100
如何?不允许使用负数范围,降序范围是为什么不使用字符串拆分,首先用分号拆分,然后用破折号拆分。最后使用int.TryParse.@jdweng虽然我同意这种方法,但OP似乎只是在进行验证,这样做可能有点过火,但是如果他们使用的是结果,我会这样做,您可以使用。val
组捕获将保存这些值。好的,regex模式可以动态构建以使其更具可读性。regex将允许输入,例如1234-
和1234512345
。它也允许前导(或全部)零,尽管原来的一个也允许,所以只需指向它out@pinkfloydx33好的,我已经更新了,所以应该可以用了now@pinkfloydx33我已经添加了一个permalinkNow用于测试now,并修复了另一个问题,因此它会在匹配开始时检查单词边界
string input = "100-200;10;2300-3400;34;";
string[] ranges = input.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string range in ranges)
{
string[] numbers = range.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string number in numbers)
{
int parsedNumber;
if (!Int32.TryParse(number, out parsedNumber))
{
//Invalid input
break; //Or return false...
}
//Use parsedNumber here
}
}