68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 189
1

Выделение текста в парных скобках

24.09.2021, 12:54. Показов 971. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я достаточно средне разбираюсь в регулярных выражениях, а тут возникла следующая задача:

В многострочном тексте выделить блок, заключённый в парные скобки (* и *), учитывая, что внутри этого блока могут содержаться и другие аналогичные блоки. Кроме того, правильность текста не гарантируется, поэтому открывающих скобок может быть больше, чем закрывающих. В таком случае нужно выделить всё от открывающей скобки до конца текста.

После некоторых размышлений и экспериментов у меня получилось следующая конструкция:
Код
\(\*
( (?R)
| [^*]
| \*(?=[^)])
| \*$
)*
( \*\) | $ )
Можно ли сделать лучше/правильнее (в идеале - обойтись без рекурсии)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2021, 12:54
Ответы с готовыми решениями:

Выделение текста в скобках
допустим есть текст тест тест2 (тест3) тест4 (тест5) как сделать чтобы слова в скобках были...

Выделение текста находящегося в скобках
Добрый вечер! Как выделить с помощью поиска текст находящийся в скобках? Выделить...

Выделение курсивом текста в скобках
имеется большой текст почти в каждом параграфе часть (текста) надо перевести в (курсив), а...

Как сделать выделение парных скобок в Дельфи 7?
как сделать выделение парных скобок в делфи7 ?

Как включить выделение парных скобок в LIsp in a Box?
Как включить выделение парных скобок в LIsp in a Box?

2
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
27.09.2021, 22:17 2
Не уверен в правильности вашего выбора в сторону регулярных выражений, так как описанная вами задача по сути относится к классическим алгоритмам разбора строк, а точнее - поиску парных скобок. Псевдокод решения данной задачи примерно таков:
Код
function isProperlyNested(text : string) : boolean {
  var counter : uint = 0;
  for (var sym : char of text) {
    if (sym === '(') ++counter;
    else if (sym === ')') {
      --counter;
      if (counter < 0) return false;
    }
  }
  return counter === 0;
}
Что же до регулярных выражений, здесь придётся отталкиваться от ориентировочных позиций начала и конца (до и после основных) скобок, - нужно смотреть на конкретный пример.
1
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 189
27.09.2021, 22:52  [ТС] 3
Цитата Сообщение от greg zakharov Посмотреть сообщение
Не уверен в правильности вашего выбора в сторону регулярных выражений
Была б моя воля, я бы тоже делал по-человечески. Но это языковой модуль для Notepad++ (FunctionList), а там всё нужно описывать исключительно регулярными выражениями.

Цитата Сообщение от greg zakharov Посмотреть сообщение
Что же до регулярных выражений, здесь придётся отталкиваться от ориентировочных позиций начала и конца (до и после основных) скобок, - нужно смотреть на конкретный пример.
Это выражение, описывающее многострочные комментарии (от "(*" до "*)").
Они могут быть вложенными и находиться абсолютно где угодно. А поскольку код работает в процессе написания исходников, то синтаксическую правильность (в данном случае - сбалансированность скобок в файле) ему никто не гарантирует. Точнее, можно быть уверенным, что обязательно придётся столкнуться с её нарушениями.

Модуль, вроде, получился рабочий - составленные мной тесты с разными неправильностями прошёл, на реальных файлах функции выгребает корректно.
Но я всегда забочусь об оптимальности (расход памяти и процессора), а в области регулярных выражений я не самый великий специалист, и поэтому решил спросить.
0
27.09.2021, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2021, 22:52
Помогаю со студенческими работами здесь

Выделение в тексте жирным шрифтом прописными буквами 16 с мигающим фоном каждого четного символа в фигурных скобках
нужно написать этот макрос на выделение в тексте жирным шрифтом прописными буквами 16 с мигающим...

Функция удаления текста в скобках
Есть задание: Написать функцию, которая из строки удаляет подстроки, заключенные в круглые скобки....

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

Парсинг текста: получить значения в скобках
Здравствуйте Имеется строка: Param(123)Param(234)Param()...Param(333) Необходимо вытащить...

Выделение слова в скобках и поиск слова без определенных букв
Текст берется из входного файла построчно, обрабатывается, и заносится в выходной файл, текст...

Поиск парных символов в словах текста. c++
Добрый день. Подскажите пожалуйста алгоритм решения этой задачки...всё упирается в создание из...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru