RegEx Проблема с использованием .NET - PullRequest
3 голосов
/ 16 февраля 2010

У меня небольшая проблема с шаблоном RegEx в c #. Вот правило ниже:

ввод: 1234567 ожидаемый результат: 123/1234567

Правила:

  1. Получить первые три цифры на входе. // 123
  2. Добавить /
  3. Добавить исходный ввод. // 123/1234567
  4. Ожидаемый результат должен выглядеть следующим образом: 123/1234567

вот мой шаблон регулярных выражений:

regex rx = new regex(@"((\w{1,3})(\w{1,7}))");

но вывод неверный. 123/4567

Ответы [ 4 ]

4 голосов
/ 16 февраля 2010

Я думаю, это то, что вы ищете:

string s = @"1234567";
s = Regex.Replace(s, @"(\w{3})(\w+)", @"$1/$1$2");

Вместо того, чтобы пытаться сопоставить часть строки, затем сопоставить всю строку, просто сопоставить все это в двух группах захвата и использовать повторнопервый.

4 голосов
/ 16 февраля 2010

Непонятно, зачем вам нужен RegEx для этого. Почему бы просто не сделать:

string x = "1234567";
string result = x.Substring(0, 3) + "/" + x;
3 голосов
/ 16 февраля 2010

Другой вариант:

string s = Regex.Replace("1234567", @"^\w{3}", "$&/$&"););

Это захватит 123 и заменит его на 123/123, оставив хвост 4567.

  • ^\w{3} - соответствует первым 3 символам.
  • $& - заменить на весь матч.

Вы также можете сделать @"^(\w{3})", "$1/$1", если вам удобнее; это более известно.

2 голосов
/ 16 февраля 2010

Используйте положительные упреждающие утверждения, поскольку они не «потребляют» символы в текущем потоке ввода, сохраняя при этом ввод в группы:

Regex rx = new Regex(@"(?'group1'?=\w{1,3})(?'group2'?=\w{1,7})");

group1 должно быть 123, group2 должно быть 1234567.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...