На самом деле вам нужно определить диапазоны от A до B. A может быть любым числом от 0 до X, а B может быть любым числом от 0 до X.
Учитывая это, вы будетестолкнитесь со следующими случаями:
1-10
1-10,000
1,000-10,000
1,000,000-2,000,000
NULL VALUE
Как только вы нашли шаблон для этих совпадений, вы сможете извлечь любые диапазоны.
Вы можете использовать это регулярное выражение: ([A-Z ]+|(?:\d{1,3}(?:,\d{3})*)-(?:\d{1,3}(?:,\d{3})*))
это означает:
(
[A-Z ]+#NULL VALUE
|#OR
(?:
\d{1,3}#A trailling number
(?:,\d{3})*#Followed or not by a thousand separator and 3 digits
)
-#The range separator
(?:\d{1,3}(?:,\d{3})*)#Same thing here
)
В коде C # это дает:
var input = "NULL VALUE,25,000-30,000,31,000-32,000,33,000-50,000";
var regex = new Regex(@"(
[A-Z ]+#NULL VALUE
|#OR
(?:
\d{1,3}#A trailling number
(?:,\d{3})*#Followed or not by a thousand separator and 3 digits
)
-#The range separator
(?:\d{1,3}(?:,\d{3})*)#Same thing here
)", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOptions.Multiline);
var matches = regex.Matches(input);
foreach (Match match in matches)
{
// Do what you want here, I choose to output it.
Console.WriteLine(match.Groups[1]);
}
Что выводит:
NULL VALUE
25,000-30 000
31 000-32 000
33 000-50 000