我有以下问题:
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}[;])*$?
这个正则表达式并没有解决我的问题,例如输入表达式中的字母经常返回true但应该返回false。关于如何解决这个问题的任何想法?
这是RB注释后的正则表达式的简化版本:
^(\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};)*$?
答案 0 :(得分:1)
如何提取组:
\b(?<FirstNum>[1-9][0-9]{1,4})(-(?<SecondNum>[1-9][0-9]{1,4}))?;
Permalink to RegexStorm包括两个无效的测试用例1234-
和12345678912345
。
然后检查它是否包含任何字母只需使用以下表达式:
[A-Za-z]
并通过以下方式验证:
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
}
}