[C#] Regex.Replace

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
Есть стандартный экшн замены по Regex, который отрабатывает корректно

Screenshot_2.png

И есть код, который не хочет давать нужный результат
C#:
string str = "1. 2. 3. 4. 5.";
Regex reg = new Regex(@"(?<=\.) ?");
str = reg.Replace(str, Environment.NewLine, 1, 3);
return str;
Screenshot_3.png

Вопрос: это код отрабатывает неправильно (баг) или сам код не верный?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
я думаю, тройка это не номер совпадения, а номер символа с которого начинается поиск
 
  • Спасибо
Реакции: Dimionix

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
я думаю, тройка это не номер совпадения, а номер символа с которого начинается поиск
Да, действительно, так и есть.

Тогда как все-таки делать замену по номеру совпадения? В том числе и не по регулярке.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
В общем, разобрался.

Замена по номеру совпадения:
C#:
string str = "1. 2. 3. 4. 5.";
string input = @"(?<=\.) ?"; // что искать
string replacement = Environment.NewLine; // на что заменить
int i = 3; // номер совпадения

Regex reg = new Regex(input);
int index = reg.Matches(str)[i].Index;
str = reg.Replace(str, replacement, 1, index);
return str;
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)