C# Regex. Разделение - Подшаблон возвращает пустые строки

Не говорите Вашему работодателю, что Вы хотите изучить Ruby. Скажите ему, что Вы хотите узнать о современном состоянии в веб-технологиях платформы. это просто происходит, что самыми горячими является Django и Ruby on Rails.

6
задан ademers 14 November 2009 в 18:55
поделиться

2 ответа

Reson 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 означает, что вы можете включать лишние пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

Разделите текст по образцу «[,;]», чтобы разделить текст запятыми или точками с запятой. В 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 означает, что вы можете включать дополнительные пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

Разделите текст по образцу «[,;]», чтобы разделить текст запятыми или точками с запятой. В 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 означает, что вы можете включать лишние пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

Split вернул только значения разделения, в данном случае «» и «», но в NET Framework 2.0 он был изменен, чтобы также включать значения, соответствующие () в регулярном выражении, поэтому вы видите «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 означает, что вы можете включать дополнительные пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

Split вернул только значения разделения, в данном случае «» и «», но в NET Framework 2.0 он был изменен, чтобы также включать значения, соответствующие () в регулярном выражении, поэтому вы видите «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 означает, что вы можете включать дополнительные пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

То, что вы искали, это 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 означает, что вы можете включать дополнительные пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

То, что вы искали, это 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 означает, что вы можете включать дополнительные пробелы в свой шаблон - это не имеет ничего общего с совпадающим текстом. Поскольку в вашем шаблоне нет лишних пробелов, он не нужен.

6
ответ дан 17 December 2019 в 00:11
поделиться

Из документов , Regex.Split () использует регулярное выражение в качестве разделителя для разделения. Он не отделяет захваченные группы от входной строки. Кроме того, IgnorePatternWhitespace игнорирует неэкранированные пробелы в вашем шаблоне, а не ввод.

Вместо этого попробуйте следующее:

var r = new Regex(@"\s*=\s*");
var mc = r.Split(command);

Обратите внимание, что пробелы фактически используются как часть разделителя.

1
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: