Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
16 / 9 / 1
Регистрация: 16.11.2021
Сообщений: 115
Записей в блоге: 3

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

02.12.2022, 20:14. Показов 501. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Подскажите пожалуйста, как это сделать?
Нужно из это текста
JSON
1
[{"name":"test_animation","pose":{"type":"String","ref":false,"mute":false,"when":[0,1,4,11,15,19,29,36,39],"val":["animated","palmONtension","palmONtension","palmONtension","palmOFFrest","palmOFFrest","palmONrest","palmONtension","flashlightIn"],"interp":[{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0},{"im":0,"v1":0.1,"v2":0.5,"in":1,"h":0,"s":false,"t":0}]}},
Вырвать этот кусок
["animated","palmONtension","palmONtensio n","palmONtension","palmOFFrest","palmOF Frest","palmONrest","palmONtension","fla shlightIn"]

Единственное чем он отличается от огромного количествадругих похожих кусков, это сочетание [" в начале и "] в конце.
Как вырвать любой текст в кадратных скобках я разобрался.
Вот так :
C#
1
string rg = @"\[(?<val>.*?)\]";
А как настроить так, чтобы выбирало только то что между [" "] ?
У меня проблема с ковычкой, она не экранируется, и вообще ломает все сразу.
Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2022, 20:14
Ответы с готовыми решениями:

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Даны 4 вида скобок () {} &lt;&gt;. Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки,использую стек. Помогите с...

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК Дана ПСП, ваша задача для каждой...

А5 регекс
День добрый, ищу слово &quot;data&quot; в тексте.Условия: 1.Слово должно стоять первым в строчке. 2.После слова не должен следовать ни один...

6
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
02.12.2022, 20:21
а это не нужно парсить регулярками, это нужно десереализовать из json, который, по виду, вполне валидный
1
16 / 9 / 1
Регистрация: 16.11.2021
Сообщений: 115
Записей в блоге: 3
02.12.2022, 20:33  [ТС]
Это файл программы Moho, открывается как зип. Там внутри картинка и текст. Он рабочий.
И единственные что его подкрашивает в нотепад ++ это json.
Очень наивный способ определять язык )) Но раз и вы подтвердили что это json пойду гуглить как его сеарилизировать и что это такое. Спасибо!

Добавлено через 8 минут
Цитата Сообщение от Diamante Посмотреть сообщение
а это не нужно парсить регулярками, это нужно десереализовать из json, который, по виду, вполне валидный
Извините, а вот такое уточнить, просто для самомотивации.
Это файл проекта, и там в этом проекте персонажи, картинки, звуки, но мультики короче.

Это получается, что если изучить сериализацию, то можно будет меняя нужные куски кода, менять картинки например? Массово, например фон новый прислали надо его заменить в 100 файлах.
Теоретически такое возможно?
0
ладно
 Аватар для TeBrado
71 / 50 / 20
Регистрация: 29.12.2021
Сообщений: 274
Записей в блоге: 1
02.12.2022, 20:49
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
using System.IO;
 
//...
string jsontext = File.ReadAllText("ПУТЬ К JSONУ, тут читает как одну строку");
int startIndex = 0; // начало скобки
int endIndex = 0; // конец скобки
for(int si = 0; si < jsontext.Length; si++)
{
if(jsontext[si] == '[')
{
for(int ei = si; ei < jsontext.Length; ei++)
{
if(jsontext[ei] == ']')
{
// устанавливаем значения
startIndex = si;
endIndex = ei;
break; break; // заканчиваем циклы
}
}
}
}
Console.WriteLine(jsontext.SubString(startIndex, endIndex);
Console.ReadKey();
Проверяйте. Код писал тут, извиняюсь если будут ошибки.

Добавлено через 3 минуты
Заметил неправильность кода (делает не то).
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
using System.IO;
using System.Collections.Generic;
 
//...
string jsontext = File.ReadAllText("ПУТЬ К JSONУ, тут читает как одну строку");
List<string> texts;
for(int si = 0; si < jsontext.Length; si++)
{
if(jsontext[si] == '[')
{
for(int ei = si; ei < jsontext.Length; ei++)
{
if(jsontext[ei] == ']')
{
// устанавливаем значения
texts.Add(jsontext.SubString(si, ei));
si = ei;
break; // заканчиваем циклы
}
}
}
}
foreach(string s in texts)
{
Console.WriteLine(s);
}
Console.ReadKey();
Проверяйте. Код писал тут, извиняюсь если будут ошибки.
1
16 / 9 / 1
Регистрация: 16.11.2021
Сообщений: 115
Записей в блоге: 3
02.12.2022, 21:30  [ТС]
Ого, на вид очень круто! Буду разбираться. Как все получится, отпишусь. Спасибище!
0
26 / 14 / 12
Регистрация: 01.02.2019
Сообщений: 66
03.12.2022, 01:15
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
 
class Program {
    static void Main(string[] args) {
// ваша строка не совсем валидный json, она начинается на "[" и заканчивается на ",". Наверное, не весь файл скопировался. 
// берёт свою строку, вставляете в нотепад ++, делаете "заменить всё" _"_ (кавычка) на \"  (слэш кавычка). Вставляете в такую конструкцию
// string jsontext = ""; между кавычек, получается это:
        string jsontext = "[{\"name\":\"test_animation\",\"pose\":{\"type\":\"String\",\"ref\":false,\"mute\":false,\"when\":[0,1,4,11,15,19,29,36,39],\"val\":[\"animated\",\"palmONtension\",\"palmONtension\",\"palmONtension\",\"palmOFFrest\",\"palmOFFrest\",\"palmONrest\",\"palmONtension\",\"flashlightIn\"],\"interp\":[{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0},{\"im\":0,\"v1\":0.1,\"v2\":0.5,\"in\":1,\"h\":0,\"s\":false,\"t\":0}]}},";
 //   ищем индекс набора символоы ",\"val\":["  (,"val":[) если без экранирования
int start = jsontext.IndexOf(",\"val\":["); 
// ищем индекс закрывающей скобки, первый после после (,"val":[)
int len = jsontext.IndexOf("]",start);
// копируем кусочек начиная от места где встретился ((,"val":[)) плюс длина самого кусочка и минус 1 что бы взять открывающуюся квадратную скобку
// до индекс где встретилась закрывающая скобка, минус длина (,"val":[) и плюс 2 потомучто :)
string result = jsontext.Substring(start + ",\"val\":[".Length-1, len -start- ",\"val\":[".Length +2);
      
Console.WriteLine(result);
 
      
    }
}
Решение за гранью добра и зла.
В самом нотепад++, вот чем-то таким _"val"\:\K(\[[^\]]*\])_ (подчёркивания поставил для экранирования, не нужны) можно выделить вашу строку.
1
16 / 9 / 1
Регистрация: 16.11.2021
Сообщений: 115
Записей в блоге: 3
03.12.2022, 13:34  [ТС]
Вот этот файл
Project.zip

Это очень упрощенный файл, я специально сократил. Вообще там до миллиона строк может быть.
И что самое обидное, не во всех файлах все искомое находится в красивой строчке в квадратных скобках как в начале темы.
Например здесь все папки с названием ISCOMOE рабросаны по всему тексту кусками:

["","ISC44444444________OMOE_2","ISCOMOE_ 5ddsr"]
Но принцип по прежнему тот же
Квадратные скобки и кавычки.

Смысл вообще в том, что люди работают в проектах в своих, и создают там папки. И вот определенные папки нужно вытаскивать из их файлов, и складывать в библиотеку, чтобы другие тоже могли воспользоваться. Можно конечно попросить чтобы все сами, если что-то новое создали, складывали в библиотеку, но то забыл, то потерял. Но итоговые проекты свои все складывают в одном место-строго определенное в облаке. И можно парсить их проекты, вытаскивать оттуда новые папки, и добавлять в библиотеку.

Тех советов, что есть выше, вполне достаточно чтобы выдернуть все куски в квадратных скобках, потом через
HashSet<string> отсеять все повторы. И то что останется, а останется немного, можно и руками перебрать.
Перебрать руками 10-20 имен все равно легче, чем руками открыть 1000 файлов.
А если прям вообще-вобще серьезно заниматься этим, то надо все-таки десериализацию изучать, как сказано выше.

Спасибо всем огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2022, 13:34
Помогаю со студенческими работами здесь

Модернезировать регекс
Есть строка типа &quot;SomeTextBlaBla(value1,value2,value3)SomeTextBlaBla&quot; Получить значения в скобках @&quot;\((.+)\)$&quot; как...

Слово с кавычкой
Суть проста, есть фраза &quot;I'll deliver your liqour&quot;, пишу скрипт для бота и программе надо нажать строчку именно с этой надписью: ...

Многострочный массив с кавычкой
Дан массив вида: Как поставить эту кавычку? '/' - не помогает! string mas = @&quot;1 2 &quot;3 4 5&quot;;

Строка с одинарной кавычкой - Регулярное выражение
Начал изучать регулярные выражения. Есть задача сделать регулярное выражение по поиску строки, которая заключена в одинарные кавычки....

Не работает запрос на добавление с одинарной кавычкой
Добрый вечер, такая ситуация, есть в базе MySQL две таблицы, одна из них таблица импорта. Добавляю данные из импорта примерно так: ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru