powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / RegExp.Replace
8 сообщений из 8, страница 1 из 1
RegExp.Replace
    #32903049
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу сообразить как в regexp.replace в строке replacestring исрользовать обратные ссылки на группы.
(Т.е. как в перле
Код: plaintext
s#(.+)\d+(.+)#\1com\ 2 # 
из "foo12bar" сделает "foocombar")

В msdn нашел replace(string,MatchEvaluator) - неужели это то что надо???!!!


Если пример с перлом не понятен, то попробую псевдо .net кодом изобразить
(который естественно не компилится так как нет объекта match)

Код: plaintext
1.
2.
3.
Regex  regex = new Regex(@"(?<server>(/(\w+/)?)) .+  ((?<user>\w+)/)",options);

regex.replace(mystring,match.Groups["user"]+" бла бла " + match.Groups["server"]);


т.е. какие служебные последовательности в replacestring надо написать чтоб на их месте получить текст определенной группы (например regex.Groups["user"])?
...
Рейтинг: 0 / 0
RegExp.Replace
    #32903995
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex("/([^/]*)/([^/]*)/", System.Text.RegularExpressions.RegexOptions.IgnoreCase);	
string str=re.Replace("/foo/bar/","$2-$1");
...
Рейтинг: 0 / 0
RegExp.Replace
    #32904043
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вашего примера видимо так:

Код: plaintext
1.
Regex re = new Regex("([^0-9]+)[0-9]+([^0-9]+)", RegexOptions.IgnoreCase	
string str=re.Replace("foo12bar","$1com$2");
...
Рейтинг: 0 / 0
RegExp.Replace
    #32905036
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
regexp.replace(s,"$1")

$1 означает какое то совпадение шаблона но не группу (именованную).

т.е.
из строки

Код: plaintext
1.
2.
3.
string s="/Test/foo/"
Regex          regex = new Regex(@"(?<group1>(/(\w+/)?))((?<group2>\w+)/)");
string snew=regex.replace(s,"$1,$2,$3)
получим
snew="/Test/,Test/,foo/".

(Можно конечно скомбинировать то что надо, но зачем тогда группы?)

а в
Код: plaintext
1.
2.
3.
Match   match = regex.Match(url);
string group1= match.Groups["group1"]);
string group2= match.Groups["group2"]);

Получим
group1="/Test/"
group2="foo"

Вот это то что надо.

Попробовал

Код: plaintext
1.
string snew=regex.replace(s,"$group1,$group2)
Получил
snew="$group1,$group2". ;)

Весь вопрос в том как в regexp.replace("blabla", "Что написать здесь чтоб вставить <group1>" )

p.s. все равно спасибо.
...
Рейтинг: 0 / 0
RegExp.Replace
    #32905039
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил сразу ответить на вопрос зачем тут группы и почему нельзя шаблон изменить
Код: plaintext
1.
2.
3.
4.
//из такого
Regex regex = new Regex(@"(?<group1>(/(\w+/)?))((?<group2>\w+)/)");
// на шаблон без групп так чтоб группы в $1 $2 попадали
Regex regex2 = new Regex(@"(/\w+/)(\w+)/");

И использовать $1 $2 в replace


Потому как, требуемое поведение
Код: plaintext
1.
2.
3.
4.
string s1 ="/Test/foo/";  // group1=/Test group2=foo
string s2 = "/foo/";         // group1=/        group2=foo

// regex2 во втором случае не справится


p.s
Сам себя б не понял на таком примере.
Но щас попробую выдумать случай когда с группами все понятно, а $1 $2 и тд будут менятся местами (сдвигаться) в зависимости от входной строки.
...
Рейтинг: 0 / 0
RegExp.Replace
    #32905609
Serg****
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APM
В msdn нашел replace(string,MatchEvaluator) - неужели это то что надо???!!!
А чем не подходит? Я так понял вам надо заменить, когда нашел, так это как раз то что надо.
Если я не правильно понял, то напишите пример что на входе и что должно быть на выходе, ИМХО так проще понимать, чем в вашем шаблоне разбираться
...
Рейтинг: 0 / 0
RegExp.Replace
    #32905881
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APM

$1 означает какое то совпадение шаблона но не группу (именованную).


$1 - oзначает не какое-то совпадение в шаблоне а ту часть строки, которая подпадает под часть шаблона, которую вы заключили в первые скобки
в моем примере это
Regex re = new Regex ("([^0-9]+) [0-9]+([^0-9]+)", RegexOptions.IgnoreCase
...
Рейтинг: 0 / 0
RegExp.Replace
    #32907221
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marina milanina APM

$1 означает какое то совпадение шаблона но не группу (именованную).


$1 - oзначает не какое-то совпадение в шаблоне а ту часть строки, которая подпадает под часть шаблона, которую вы заключили в первые скобки
в моем примере это
Regex re = new Regex ("([^0-9]+) [0-9]+([^0-9]+)", RegexOptions.IgnoreCase

Совершенно верно. До этого я догадался.

Пытаюсь придумать шаблон и строки на вход такие чтоб в зависимости от строк было когда так
<group1>=$1+$2
а когда <group1>=$2+$3
(Почему то глючит меня что так может быть)

Но если это невозможно тогда $1 $2 и тд мне подойдут.

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


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