Как удалить комменты регулярными выражениями?

Автор Hasim, 11 января 2013, 00:44

0 Пользователи и 1 гость просматривают эту тему.

Hasim

Добрый день всем!
Вот такая есть задачка.
В ячейках таблицы Calc в тексте имеются комменты, заключенные в квадратные скобки (рис. Pie1).
Как их можно удалить с помощью регулярных выражений в "Найти и заменить", чтобы получить такой результат (рис. Pie2).
Файл с примером прилагается ("Лист1" - исходник, "Лист2" - требуемый результат).



[вложение удалено Администратором]

bormant

#1
Найти: \[[^\]]+\]
Заменить на: (пусто)
[ v ] Регулярное выражение
[ Заменить все ]
Автору на яд. Поддержать форум.

VlhOwn

Так удаляет все кроме первой группы. Первую группу (после удаления остальных) можно удалить образцом \[.*\]

bormant

#3
Цитата: VlhOwn от 11 января 2013, 08:38Так удаляет все кроме первой группы.
Не понял. Что есть "первая группа"? Откуда предположения, что что-то не будет удалено?

[вложение удалено Администратором]
Автору на яд. Поддержать форум.

Hasim

Собственно задачка взята из упражнений на закрепление использования регулярных выражений.
В полном виде требуется для произвольно заданного вида ограничителей составить соответствующее регулярное выражение и объяснить подробно, как оно составлено (Это самое важное!!!).

[ ]          -  \[[^\]]+\]
< >         -
<!-- -->  -
{ }         -
и т.д.


VlhOwn

#5
LibreOffice 3.6.0.2 Ubuntu

Составлено просто: все символы, заключенные в квадратные скобки (\[ и \]) и не являющиеся закрывающей квадратной скобкой ([^\]]+).

[вложение удалено Администратором]

bormant

В начале регвыражения действительно стоит пробел, или показалось? Если стоит, надо убрать, первым символом является "\".
Автору на яд. Поддержать форум.

VlhOwn

Действительно, Сергей, сорри - невнимателен.

И раз уж пошла такая пьянка, как ты решишь эту задачку для многосимвольных скобок, не используя модификаторы, т.е. в ООо, где ищется максимальное вхождение?

bormant

В ООо с этим будут проблемы, причина которых -- отсутствие возможности управлять жадностью групповой маски. Если в строке встретится более одного комментария, то
<!--.+-->
захватит всё от начала первого до конца последнего комментария. Поэтому единственный полурабочий вариант с надеждой на то, что внутри комментария отсутствует ">":
<!--[^>]+-->
плюс ручной визуальный контроль за найденным.
Автору на яд. Поддержать форум.

VlhOwn

Ну да, собственно, про это и был вопрос. Хотя, казалось бы, что стоит включить в диалог задание модификаторов?
По-видимому, дело в совместимости с MS. Во всевозможных функциях поиска для модификатора потребовался бы еще один аргумент. В MS регулярные выражения не используются, и для них этот вопрос не актуален.

JohnSUN

Цитата: VlhOwn от 11 января 2013, 15:51
...В MS регулярные выражения не используются, и для них этот вопрос не актуален.
Ну, не совсем так. Есть у них с понтом дела регулярные выражения
Просто они - как всегда! - наплевали на существующие решения и стандарты и пошли своим путём: напридумывали собственных регулярных выражений. Которые удобнее "нашим" пользователям потому что чаще всего в два раза короче в записи (просто "звездочка" вместо "точка-звёздочка", например). И плевать, что такие вилдкарды больше нигде не используются - "наши" пользователи и не должны ничем другим пользоваться!
А в двух из трех комментариев о работе ООо&LiO - "Вот блин! У вас всё сделано неправильно!.."
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

VlhOwn

Да, повторители есть, но этим регулярные выражения отнюдь не исчерпываются.

JohnSUN

Это ты про ^t, ^$, ^?, тильду и прочую ерунду? Да ну их, в самом-то деле! Не хватало, чтобы мы ЗДЕСЬ начали обсуждать как это сделано ТАМ...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне