Резонанс RegEx.Split возвращает четыре значения в том, что у вас есть ровно одно совпадение, поэтому RegEx.Split возвращает:
- Весь текст перед вашим совпадением, который ""
- Все () группы в вашем матче, которые "NewVar" и "40"
- Весь текст после вашего матча, который ""
Основная цель RegEx.Split - извлечь любой текст между соответствующим регулярным выражением, например, вы можете использовать RegEx.Split с шаблоном "[,;]" для разделения текста на запятые или точки с запятой , В NET Framework 1.0 и 1.1 Regex.Split возвращал только разделенные значения, в данном случае "" и "", но в NET Framework 2.0 он был изменен, чтобы также включать значения, совпадающие с () в Regex, поэтому вы видя "NewVar" и "40" вообще.
То, что вы искали, это Regex.Match
, а не Regex.Split
. Он будет делать именно то, что вы хотите:
var r = new Regex(@"^(\w+)=(\d+)$");
var match = r.Match(command);
var varName = match.Groups[0].Value;
var valueText = match.Groups[1].Value;
Обратите внимание, что RegexOptions.IgnorePatternWhitespace означает, что вы можете включать в шаблон дополнительные пробелы - это не имеет никакого отношения к сопоставленному тексту. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.