Есть ли простой способ извлечь из строки, разделённой "," третий токен, НЕ СЧИТАЯ запятые, которые в скобках?
Есть строка
Требуется извлечь из неё третий токен, то есть "1920x1080". Ситуация осложняется тем, что в некоторых токенах могут быть скобки, в которых тоже могут быть запятые, которых считать не нужно, поэтому в лоб разбить строку в массив не получится. Приходится извращаться - обрабатывать строку символ за символом - встретилась запятая, посчитали, встретилась "(" - взвели флажок и не считаем, встретилась ")" - сбросили флажок и считаем запятые снова.
Или есть метод лучше? Регулярные выражения, например?
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 1744 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Требуется извлечь из неё третий токен, то есть "1920x1080". Ситуация осложняется тем, что в некоторых токенах могут быть скобки, в которых тоже могут быть запятые, которых считать не нужно, поэтому в лоб разбить строку в массив не получится. Приходится извращаться - обрабатывать строку символ за символом - встретилась запятая, посчитали, встретилась "(" - взвели флажок и не считаем, встретилась ")" - сбросили флажок и считаем запятые снова.
Или есть метод лучше? Регулярные выражения, например?
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
встретилась содержит "(" - взвели флажок и не считаем, встретилась содержит")" - сбросили флажок и считаем запятые элементы снова Да, упрощение/ускорение небольшое... примерно, как вознаграждение. ;)
в лоб разбить строку в массив не получится.
Получится, только скобки надо учитывать и в этом случае - разделяем в массив по запятым, а потом перебираем не символы, а элементы массива по тому же принципу:
(8) Без обид, но для 21-го века нужно что-то типа микросервисов или хотя бы OLE Automation, а тут старая добрая строка в стиле 70-х.
P.S. Удивительно устроен мир - на форуме, где я спрашивал в лоб про такое, мне никто не ответил, но зато отвечают здесь, хотя я даже про это не спрашивал :))))
P.S. Удивительно устроен мир - на форуме, где я спрашивал в лоб про такое, мне никто не ответил, но зато отвечают здесь, хотя я даже про это не спрашивал :))))
(4)Еще вариант - найти все "скобки, в которых тоже могут быть запятые", что-то типа такого:
Заменить их на пустую строку и дальше через СтрРазделить уже взять элемент с индексом 2.
На 8.3.23 это примерно так будет выглядеть(без проверок на индекс массива):
[(].[^()]*?[,].*?[)]
Заменить их на пустую строку и дальше через СтрРазделить уже взять элемент с индексом 2.
На 8.3.23 это примерно так будет выглядеть(без проверок на индекс массива):
СтрокаОчищенная = СтрЗаменитьПоРегулярномуВыражению(СтрокаИсходная, "[(].[^()]*?[,].*?[)]","");
МассивПодстрок = СтрРазделить(СтрокаОчищенная, ",");
Сообщить(МассивПодстрок[2]);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот