powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заменить подстроку в строке
8 сообщений из 8, страница 1 из 1
Заменить подстроку в строке
    #39875063
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть массив строк:
Код: c#
1.
["(10)","(13)","(11)","(12)","(09)"]



Есть строка в которой присутствуют элементы массива как подстроки могут стоять рядом, могут быть одиночными:
Код: c#
1.
"text (10)(11)text(09)текст(12)(10)"



Нужно заменить рядом стоящие элементы массива на произвольную подстроку в исходной строке, например на "XXX".
Порядок элементов в массиве и в строке неважен. Главное заменить рядом стоящие, не трогая одиночные.
Т.е например результат:
Код: c#
1.
"text XXXtext(09)текстXXX"


как бы поэлегантнее это сделать?
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875082
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а элементы массива получится регуляркой обобщить? Или они произвольные?
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875097
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа элементы массива получится регуляркой обобщить? Или они произвольные?
произвольные, они генерятся отдельным сервисом и могут быть любой последовательностью символов, не только числами и скобками
спасибо

объемы у меня не большие, ресурсы производительность не сильно важны
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875110
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так.

Код: c#
1.
var rex = new Regex("(" + String.Join("|", array) + "){2}");



Но, перед этим надо в массиве заескейпить с помощью "\" всякие символы, которые для регекспа имеют специальное значение (за этим уже в референс по регекспам). Что-то типа:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var outStr = new StringBuilder();

foreach(var @char in inStr) 
{
    // ахтунг, перечень наверняка неполный
    if("\\[]()*.{}^$+".Contains(@char))
    { 
        outStr.Append('\');
    }

    outStr.Append(@char);
}
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875135
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatзаескейпить с помощью "\" всякие символы, которые для регекспа имеют специальное значение (за этим уже в референс по регекспам). Что-то типа:открой для себя Regex.Escape()
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875139
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Код: c#
1.
var rex = new Regex("(" + String.Join("|", array) + "){2}");

почему {2}, я так понимаю, надо +
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875143
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Profkthat
Код: c#
1.
var rex = new Regex("(" + String.Join("|", array) + "){2}");

почему {2}, я так понимаю, надо +

Наверное "плюс", да. Я как-то по примеру интуитивно подумал, что речь идет из повторов по 2 вхождения подряд. Но идею, я думаю, ТС понял.
...
Рейтинг: 0 / 0
Заменить подстроку в строке
    #39875148
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proоткрой для себя Regex.Escape()

О! Супер. Я про него как-то и не знал.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заменить подстроку в строке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]