Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 2 / 3
Регистрация: 29.04.2015
Сообщений: 29
.NET 4.x

Используя регулярные выражения получить значения из строки

25.02.2016, 23:37. Показов 2395. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Используя регулярные выражения нужно из строки вида method?variable1=data&variable2=data&... получить значения method(Группа 1), variable1=data(Группа 2), variable2=data(Группа 3) и т.д.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2016, 23:37
Ответы с готовыми решениями:

Удалить из строки все слова начинающиеся с гласных, используя регулярные выражения
В задании нужно удалить из строки все слова начинающиеся с гласных(русских) используя при этом регулярные выражения, я думаю что надо по...

Регулярные выражения. Найти строки содержащие значения переменной s в качестве подстроки
Здравствуйте! я новичок в с#. Как сделать такое задание? Дан текстовый файл f и строка s, Переписать в новый файл g все строки файла f,...

Как распарсить строки, используя регулярные выражения
Здравствуйте. есть небольшая проблема, с парсингом через регулярные выражения, в общем, нужно отпарсить выражение: VAR a,b,c; ...

6
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
26.02.2016, 13:01
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public static Dictionary<string,Dictionary<string,string>> ParseMethodsAndValues(string s)
        {
            var res = Regex.Matches(s, @"(?<=(?<method>[^=&\?]*)\?(?:[^=&\?]*=[^=&]*&){0,})(?<var>[^=&\?]*)=(?<value>[^=&]*)(?=&|\Z)");
            Dictionary<string, Dictionary<string, string>> dt = new Dictionary<string, Dictionary<string, string>>();
            var grouped = res.Cast<Match>().GroupBy(x => x.Groups["method"].Value).ToList();
            foreach (IEnumerable<Match> mts in grouped)
            {
                Dictionary<string, string> dtsmall = new Dictionary<string, string>();
                foreach (Match m in mts)
                {
                    dtsmall.Add(m.Groups["var"].Value, m.Groups["value"].Value);
                }
                dt.Add(mts.First().Groups["method"].Value, dtsmall);
            }
            return dt;
        }
Добавлено через 7 минут
Правда что может/не может быть перед method я не понял, и сделал так, как будто он ограничивается слева либо началом строки, либо знаками "&?=". Добавите знаки по вкусу.
1
3 / 2 / 3
Регистрация: 29.04.2015
Сообщений: 29
27.02.2016, 20:56  [ТС]
Method - это названия какого-либо метода, который нужно выполнить. Он ограничивается слева только началом строки. После знака ? идёт перечисление параметров по типу Название_параметра = Значение. Если параметры повторяются, то используется знак &.
Кликните здесь для просмотра всего текста
Строка похожа на содержимое Get запроса в протоколе HTTP, только вместо запрашиваемого документа пишется какая-либо функция.

Если отсутствую передаваемые параметры, то данный код ничего не возвращает не могли бы переписать?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
27.02.2016, 22:02
getigor01, а что идет после названия метода, если у него нет параметров? Знак ? остается? И что может идти после параметров?
0
3 / 2 / 3
Регистрация: 29.04.2015
Сообщений: 29
27.02.2016, 22:29  [ТС]
если нету параметров, то знак после метода не нужен. после параметров ничего нету (the end).
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
28.02.2016, 11:06
Лучший ответ Сообщение было отмечено getigor01 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public static KeyValuePair<string, Dictionary<string, string>>? ParseMethodsAndValues(string s)
        {
            var res = Regex.Matches(s, @"(?<=(?<method>\A[^\?]+)(\Z|(\?(?:[^=]*=[^&]*&){0,})(?<var>[^=]*)=(?<value>[^&]*)(?=&|\Z)))");
            Dictionary<string, string> dtsmall = new Dictionary<string, string>();
                foreach (Match m in res)
                {
                    if(m.Groups["var"].Value!="")
                    dtsmall.Add(m.Groups["var"].Value, m.Groups["value"].Value);
                }
            if (res.Count > 0)
            return new KeyValuePair<string, Dictionary<string, string>>(res[0].Groups["method"].Value, dtsmall);
            else return null;
        }
Если, как я понял, в строке может быть только один метод, тогда как-то так.
1
3 / 2 / 3
Регистрация: 29.04.2015
Сообщений: 29
28.02.2016, 22:12  [ТС]
Спасибо, вроде всё работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2016, 22:12
Помогаю со студенческими работами здесь

Распарсить страницу, используя регулярные выражения
Здравствуйте. Вопрос такой: в программу приходит ответ от сайта: &lt;img width=&quot;12&quot; height=&quot;12&quot;...

Вырезание текста, используя регулярные выражения
Всем доброго времени суток. Встала проблема: есть текст - набор любых текстовых символов и цифр. Он разделяется тегами - IN и OUT....

Разделить строку используя регулярные выражения
Всем привет. Помогите с таким вопросом. Имеется предложение Мама, ax ax,, мыла раму 25/05/2015 ух;25раз!!! Потом 26/05/2015...

Используя регулярные выражения, заменять цифры от 0-9 пустотой
Дана строка вида «21415@#3w42y4thgbxcnnxdfb@54253185471». Записать программу, которая с использованием регулярных выражений будет заменять...

Найти текст по начальному тексту, не используя регулярные выражения
Найти часть текст по начальному тексту не используя регулярные выражения Т.е например есть список Белый Белка Красный Серый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru