Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265

Распарсить строку

06.04.2017, 12:26. Показов 1381. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
У меня есть строка вида: "{var1}{var2}const1{var3}const2"
Мне нужно её распарсить и получить на выходе
{var1}
{var2}
const1
{var3}
const2

Мне кажется это можно регулярками зарешать, но я в них не силён, у меня получается собрать регулярку, которая только то что в фигурных скобках выдирает. А мне нужно всё целиком разобрать и понимать в конце, что было в скобках, а что нет.
Парсить ручками находя позиции и прочие шаманства очень не хочется.

Помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2017, 12:26
Ответы с готовыми решениями:

Распарсить строку
Здравствуйте подскажите пожалуйста регулярное выражение для того чтобы распарсить строку вида : ...

Распарсить строку
Всем вечер добрый, господа. Есть такая беда. Есть строка. И она меняется(!)...Однако символы ( & И ; - не меняются.) Допустим...

Распарсить строку
Здравствуйте ув.форумчани! Помогите пожалуйста с регуляркой. Имеется вот такой вот текст: <table...

9
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
06.04.2017, 12:46
что то около
C#
1
2
3
4
5
var s = "{var1}{var2}const1{var3}const2";
var match = Regex.Match(s, @"(\{.+?\})(\{.+?\})(.+)(\{.+?\})(.+)");
foreach (var m in match.Groups.Cast<Group>().Skip(1)) {
    Console.WriteLine(m.Value);
}
0
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
06.04.2017, 13:01  [ТС]
Цитата Сообщение от jr_ Посмотреть сообщение
что то около
Спасибо, но... я видимо не очень точно выразил свою мысль. Строка позиционно не зависима. Т.е. "константы" и "переменные" в ней в случайном порядке и в случайном количестве. Мне как раз таки и нужно выделить из строки их тип и порядок.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
06.04.2017, 13:12
Predatore, вам тут поможет конечный автомат вручную написанный. Задача не такая сложная.
0
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
06.04.2017, 13:40  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Predatore, вам тут поможет конечный автомат вручную написанный. Задача не такая сложная.
Т.е. Вы мне предлагаете всё-так в ручную парсить строку по частям? Я только что сделал может и не очень красиво, но гораздо проще:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string[] res = inString.Split( new char[] { '}', '{' } );
foreach( string str in res )
{
  strPos = inString.IndexOf( str );
  if( strPos > 0 )
  {
    if(inString[strPos-1].ToString() == "{")
    {
      // Переменная
    }
    else
    {
      // Константа
    }
  }
  else
  {
    // Константа
  }
}
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
06.04.2017, 13:41
Predatore, хреновое решение, если честно. Но если работает и вас всё в нём устраивает, то пускай будет.
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
06.04.2017, 13:56
Лучший ответ Сообщение было отмечено Predatore как решение

Решение

C#
1
2
3
4
5
var s = "{var1}{var2}const1{var3}const2";
var matches = Regex.Matches(s, @"(\{\w+?\})|\w+");
foreach (Match m in matches) {
    Console.WriteLine(m.Value); 
}
ну или я не знаю чего он хочет
1
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
06.04.2017, 16:31  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Predatore, хреновое решение, если честно. Но если работает и вас всё в нём устраивает, то пускай будет.
Знаю что хреновое, но работает. Устраивает или нет, это вопрос философский. Я сразу сказал, что оно мне не нравится, но когда ничего лучше придумать не можешь... Я за тем и пришёл сюда, что *овнокодом и сам справлюсь

Цитата Сообщение от jr_ Посмотреть сообщение
C#
1
2
3
4
5
var s = "{var1}{var2}const1{var3}const2";
var matches = Regex.Matches(s, @"(\{\w+?\})|\w+");
foreach (Match m in matches) {
    Console.WriteLine(m.Value); 
}
ну или я не знаю чего он хочет
Оно! Спасибо! Надо подружиться с реулярками, а то я чёт-то очень смутно улавливаю смысл этих закорючек. По отдельности ещё куда не шло, а вместе - китайская грамота. Не посоветуете какого-нибудь толкового мануала? Так что бы не просто справочник а ля \w - любой текстовый символ.
0
44 / 33 / 14
Регистрация: 27.04.2012
Сообщений: 153
06.04.2017, 16:55
Цитата Сообщение от Predatore Посмотреть сообщение
Не посоветуете какого-нибудь толкового мануала? Так что бы не просто справочник а ля \w - любой текстовый символ.
Ну я смотрел что да как вот тут. Но особо сложных заданий там нет.
1
 Аватар для ata
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
07.04.2017, 06:51
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using System;
using System.Text.RegularExpressions;
 
class Program
{
    public static void Main()
    {
        foreach (Match match in Regex.Matches("{var1}{var2}const1{var3}const2", @"(?:\{\w+\})|(?:(?<=\})\w+(?=\{))"))
        {
            Console.WriteLine(match.Value);
        }
    }
}
Добавлено через 1 час 35 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
 
class Program
{
    public static void Main()
    {
        string s = "{var1}{var2}const1{var3}const2";
        List<string> variables = new List<string>();
        List<string> constants = new List<string>();
        bool isVariable = false;
        int begin = 0;
        for(int i = 0; i <= s.Length; ++i)
        {
            if (i == s.Length || s[i] == (isVariable ? '}' : '{'))
            {
                if (i != begin)
                {
                    (isVariable ? variables : constants).Add(s.Substring(begin, i - begin));
                }
                isVariable = !isVariable;
                begin = i + 1;
            }
        }
        Console.WriteLine("Variables:");
        variables.ForEach(Console.WriteLine);
        Console.WriteLine("Constants:");
        constants.ForEach(Console.WriteLine);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2017, 06:51
Помогаю со студенческими работами здесь

Распарсить строку
Доброго времени суток, подскажите как можно распарсить следующую строку ...

Распарсить строку
Суть вопроса такова, есть тест: MyName is: Brain So, bla bla Мне нужно спарсить Brain

Распарсить строку
String s = &quot;`user999` | 1882 &quot;; string pattern = @&quot;(\d)+&quot;; RegexOptions option = RegexOptions.IgnoreCase; ...

Разобрать строку (распарсить)
Всем привет, как можно правильно распарсить строку приерного вида? msg = &quot;temp1 = 25C, temp2=33, humidity = 85, light level = 57...

Распарсить Json строку
Доброго времени суток. При попытке распарсить строку в формате Json у меня возник вопрос - можно ли ее вообще распарсить. Вот строка: ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru