[ID CC-CC2021] Помогите пожалуйста выделить текст между звездочками по GREP

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Здравствуйте.
Здоровья вам и дорогим вам людям.


Черновик с простым текстом, по разному выделены фразы, используя *
Так же в тексте присутствуют строки-отточие вида *** или * * *

Пример:
Код:
***
* * *
Побоялся изложить ** бобик ** текст текст *маруся* текст.
Побоялся изложить **шкот** текст текст *барсик* текст.
Побоялся изложить *палкан* текст текст * шарик * текст.
Побоялся изложить * крыса * текст текст *тамагочи* текст.

Необходимо выделить текст GREP`ом между звездочек, в разных группах
не затрагивая другую группу выделений, отточие:

1я группа-запрос
*кот*
* кот *
(равны)

2я группа-запрос
**кот**
** кот **
(равны)

3я группа-запрос-отточие (могут быть пробелы перед и после)
*** (\*{3}) * * * \*\s\*\s\*(\s+$|$)
(равны)


Пробовал многое - не получается:
идет или захват на соседние слова/*
или только выделение "**".

Помогите пожалуйста с решением:
Выделить группы-текст между звездочками по GREP
Заранее большое спасибо!




PS
по хорошему конечно необходимо выделять еще и * после слова - вдруг где сноска
но, кажется в данном случае то приведет к сильному усложнению запросов
остается только финальная вычитка...



Не по теме:
**
прежде GREP, можно отредактировать сам текст, заменяя например ** на __
тем самым упростив задачу.
но 1: исходник-черновик может быть скорректирован и придется все заново...
но 2: в исходнике присутствуют и другие выделения, и в том случае и __

***
Пробовал:
\*{1}(.*?)\*{1}
\*{1}[^\*]+(.*?)[^\*]+\*{1}
(\*{1}[^\*]+)(.*?)([^*\]+\*{1})
(\*{1}[^\*]+)(.*?)(\*{1}[^\*]+)
(\*{1}[^\*\*]+)(.*?)(\*{1}[^\*\*]+)
(\*{1}|\*{1}\s)(.*?)(\s\*{1}|\*{1})
(?<=\*)[^\*\n]*(?=\*|$)

 

К.Т.

Участник
Сообщения
323
Реакции
337
Между одинарными: (?<=[^*]\*)[^*]{2,}(?=\*[^*])
Между сдвоенными: (?<=[^*]\*{2})[^*]{2,}(?=\*{2}[^*])
Строки-отточия: ^[\h*]+$
 
  • Спасибо
Реакции: blacksolg и RIKITIKI

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Между одинарными: (?<=[^*]\*)[^*]{2,}(?=\*[^*])
Между сдвоенными: (?<=[^*]\*{2})[^*]{2,}(?=\*{2}[^*])
Строки-отточия: ^[\h*]+$

Спасибо.

Приведенные вами решения на проверке - отлично работают внутри потока текса.
Еще раз за это спасибо.

Есть и "но":
Выделения вне потока текста, особенно для *__*
Но тут, думаю больше вопрос к корректности самого текста/черновика
ведь забытые/лишние поставленные звездочки-маркеры
хоть и портят картину выделения, зато помогают найти эти ошибки внутри текста.

Конечно хочется идеальное GODMOD решение,
но насколько я понимаю - трудозатратнее/не решаемо.
Тем более если хочешь "замечательное решение" то и текст должен соответстовать
...да на такие расчеты, может вообще скрипт нужен =)


PS
на улучшение запросов - не настаиваю.
хочется лучше, но в потоке работает - здорово!
и Вам очень признателен, спасибо!

лишь, как и в предыдущем посте не понял новую для меня "функцию" [\h*]+
изящно но не понятно =) - поиск по справке Indesign GREP показал лишь
что есть
Переменная номера главы ^H ~H
Конец вложенного стиля в заданной позиции ^h ~h

- но где глава и вложенный стиль применительно к *** !? - не вижу
- мистика

Под итогом привожу скриношоты "ошибок"
Которые выявил при тесте
001.png
002.png
003.png
004.png
005.png
006.png
 

Вложения

  • 004.png
    004.png
    29.9 КБ · Просм.: 158

К.Т.

Участник
Сообщения
323
Реакции
337
Доработка:
Между одинарными: (?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
Между сдвоенными: (?<=[^*]\*{2})[^*\r\n]{2,}(?=\*{2}[^*])

\h — любой горизонтальный пробельный символ: разные шпации, табуляции, но не разрывы строк или абзацные символы.
 
Последнее редактирование:
  • Спасибо
Реакции: blacksolg и RIKITIKI

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Доработка:
Между одинарными: (?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
Между сдвоенными: (?<=[^*]\*{2})[^*\r\n]{2,}(?=\*{2}[^*])

\h — любой горизонтальный пробельный символ: разные шпации, табуляции, но не разрывы строк или абзацные символы.

Спасибо!!
За вариант 2 - работает на ура.
За расшифровку и урок по \h.


И у вас такой мудреный(для меня) GREP =)
...
После "выделение внутри маркеров -> присвоить стиль"
планировалось удалить все эти самые маркеры выделений.
И благо вашей К.Т. помощи, уроку по \h,
удалось собрать GREP - выделение ВМЕСТЕ с маркерами
Спасибо еще раз

Но получилось только МЕЖДУ сдвоенными **___**:
запрос: (\*{2})(|\h)([^\h][^*\r\n].*?)(|\h)(\*{2})
замена на (удаление маркеров): $3

А вот с *_* (единичными) вообще не получается - постоянные ошибки
([^*]\*)([^\h][^*\r\n].*?)(\*[^*]) - к чему подошел, но он захватывает и пробелы/переносы вне **___**


Думал справлюсь - не смог.
Тогда включил "макаку за пишущей машинкой"
и перепробовал 130-150 вариантов - не получилось...


К.Т. если у вас есть возможность, не могли бы вы помочь с выделением включая маркеры?
Заранее спасибо!


Код:
ТЕСТ 0
***
***
* * *
* * *
        * * *

ТЕСТ 1
*выделение* 
*выделение* символ
* выделение *

* курсив *
какой-то текст*

ТЕСТ 2
**выделение** 
**выделение** символ
** выделение **

** курсив **
какой-то текст*

** курсив **
какой-то текст**

ТЕСТ 3
Побоялся изложить ** бобик ** текст текст *маруся* текст.
Побоялся изложить **шкот** текст текст *барсик* текст.
побоялся изложить *палкан* текст текст * шарик * текст.
побоялся изложить * крыса * текст текст *тамагочи* текст.
a001.png
a002.png
a003.png
Код:
(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
([^*]\*)[^*\r\n]{2,}(\*[^*])
([^*]\*)([^\h][^*\r\n].*?)(\*[^*])
([^*]\*)([^*\r\n]{2,})(\*[^*])
([^\*]\*)([^\h][^*\r\n].*?)(\*[^\*])
([^\*]\*)([^\h][^*\n].*?)(\*[^\*])


(\h)(\*{1})[^*\r\n]{2,}(\*{1})(\h)
(\h)(\*{1})[^*\r\n]{1,}(\*{1})(\h)
(\h)(\*{1})[^*\r\n](\*{1})(\h)

(\r\n\h)(\*{1})[^*\r\n]{2,}(\*{1})(\r\n\h)
(\h)(\*{1})[^*\r\n]{2,}(\*{1})(\h)
(\h)(\*{1})[*\r\n](\*{1})(\h)

(?<=[^*]\*)[^*\r\n]{2,}(\*{1})
(?=[^*]\*)[^*\r\n]{2,}(\*{1})
(?=\*)[^*\r\n]{2,}(\*{1})
(?=[^*])[^*\r\n]{2,}(\*{1})

([^\*]\*{1})(|\h)([^*\r\n]{2,})(|\h)(\*{1}[^\*]) **
([^*]\*)(|\h)([^*\r\n]{2,})(|\h)(\*[^*]) **
([^\*]\*{1})(|\h)([^*\r\n]{2,})(|\h)(\*{1}[^\*]) **
([^\*]\*)([^*\r\n]{2,})(\*[^\*]) **


2 ([^*]\*{2})[^*\r\n]{2,}(\*{2}[^*])

Между одинарными: 
(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
([^*]\*)[^*\r\n]{2,}(\*[^*])
([^*]\*)([^\h][^*\r\n].*?)(\*[^*])
([^*]\*)([^*\r\n]{2,})(\*[^*])
([^\*]\*)([^\h][^*\r\n].*?)(\*[^\*])
([^\*]\*)([^\h][^*\n].*?)(\*[^\*])

(\*{1})(|\h)([^\h][^*\r\n].*?)(|\h)(\*{1}[^\*])

(\*{1})(|\h)([^\h][^*\r\n].*?)(|\h)(\*{1}) - но захватывает ***, ошибки
(\*{1})(|\h)([^\h][^*\r\n]{2,})(|\h)(\*{1})
(\*{1})(|\h)([^*\r\n]{2,})(|\h)(\*{1})
(\*)(|\h)([^\h][^*\r\n].*?)(|\h)(\*)
(\*{1})(\*{1})(|\h)([^*\r\n]{2,})(|\h)(\*{1})(\*{1})
([^\*]\*)(|\h)([^*\r\n]{2,})(|\h)(\*[^\*])
([^\h][^\*]\*)(|\h)([^*\r\n]{2,})(|\h)(\*[^\*][^\h])
(?=\h[^\*]\*)(|\h)([^*\r\n]{2,})(|\h)(\*[^\*]?=\)
(?=\h[^\*]\*)(|\h)([^*\r\n]{2,})(|\h)(\*[^\*][?=\])

(?=[^\*]\*{2})(|\h)([^*\r\n]{2,})(|\h)(?=\*{2}[^\*])
(?=\*{2})(|\h)([^*\r\n]{2,})(|\h)(?=\*)
(?=\*)(|\h)([^*\r\n]{2,})(|\h)(?=\*)
(?=\*)([^*\r\n]{2,}))(?=\*)
(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
([^*]\*)[^*\r\n]{2,}(\*[^*])

([^*]\*)[^*\r\n]{2,}(\*[^*])
(\*)[^*\r\n]{2,}(\*)
([^\*]\*)([^*\r\n].*?)(\*[^\*])
([^\*])(\*)([^*^\r\n].*?)(\*)([^\*])

([^*])[^*\r\n]{2,}([^*])

(?<=[^\*])[^*\r\n]{2,}(?=\*[^*])
(?<=[^\*])[^*\r\n]{2,}(?=[^*])
(?<=[^\*])[^*\r\n]{2,}(?=\*)

(\*)[^*\r\n]{2,}(?=\*[^*])
(\*)[^*\r\n]{2,}(\*[^*])
(\*)[^*\r\n]{2,}(\*)
(\*)[^*\r\n]{2,}([^/*])

(?<=[^*]\*)[^*\r\n]{2,}(\*{1})
(?<=[^*]\*)[^*\r\n]{2,}(\*{1}[^\*]+?)
(?<=[^*]\*)[^*\r\n]{2,}([^\*]+?)
(?<=[^*]\*)[^*\r\n]{2,}[^\*]+?
(?<=[^*]\*)[^*\r\n]{2,}([^\*])+?
(?<=[^*]\*)[^*\r\n]{2,}[^\*]+?
(?<=[^*]\*)[^*\r\n]{2,}\*{1}[^\*]+?

(?<=[^*]\*)[^*\r\n]{2,}(\*{1})
([^*]\*)[^*\r\n]{2,}(\*{1})
(\*)[^*\r\n]{2,}(\*{1})
(\*)[^*\r\n]{2,}\*{1}[^\*]+?

(?<=\*\*)[^*\r\n]{2,}(\*{1})
(?<=\h\*)[^*\r\n]{2,}(\*{1})
(?=[^*]\*)[^*\r\n]{2,}(\*{1})
(?<=\*)[^*\r\n]{2,}(\*{1})

(?=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
(?=[^*]\*)[^*\r\n]{2,}(?<=\*[^*])

(?=\*)[^*\r\n]{2,}(?=\*[^*])
(?=\*)[^*\r\n]{2,}(?<=\*[^*])

(?=[^*]\*)[^*\r\n]{2,}(\*{1})

(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])

(\h)(\*{1})[^*\r\n]{2,}(\*{1})(\h)
(\r\n\h)(\*{1})[^*\r\n]{2,}(\*{1})(\r\n\h)
(|\h)(\*{1}[^\*])[^*\r\n]{2,}(\*{1}[^\*])(|\h)

([^*]\*)([^*\r\n]{2,})(\*[^*]) ****
([^*]\*)([^*\r\n])(\*[^*]) **
[^*]\*([^*\r\n]{2,})\*[^*] ****
\*([^*\r\n]{2,})\* ****

\*\*([^*\r\n]{2,})\*\*
(\*\*)([^*\r\n]{2,})(\*\*)
(\*\*)([^*\r\n])(\*\*)
(\*\*)(^*\r\n)(\*\*)
---
(\*\*)(.*?)(\*\*)
(\*\*\h)(.*?)(\h\*\*)
(\*{2}\h)(.*?)(\h\*{2})
(*{2}\h)(.*?)(\h*{2})
(\*\*)(\h)(.*?)(\h)(\*\*)
(\*\*)(|\h)(.*?)(|\h)(\*\*)
(\*\*)(|\h)([^\h].*?)(|\h)(\*\*)
---------
(\*\*)(|\h)([^\h].*?)(|\h)(\*\*)

---------
([^*]\*)[^*\r\n]{2,}(\*[^*])
(\*)[^*\r\n]{2,}(\*[^*]) ***

(\*)([^*\r\n]){2,}(\*[^*])
(\*)([^*\r\n]{2,})(\*[^*])
--------------------
([^*]\*)([^*\r\n]){2,}(\*[^*]) **
([^*]\*)([^*\r\n]{2,})(\*[^*]) ****
$2 - удаляет побелы перед и после
([^*]\*)([^*\r\n])(\*[^*]) **
[^*]\*([^*\r\n]{2,})\*[^*] ****
\*([^*\r\n]{2,})\* ****
\*\*([^*\r\n]{2,})\*\* *****
[^*]\*([^*\r\n])\*[^*]
[^*]\*(.+?)\*[^*]

--------------------
(?<=[^*]\*{2})[^*\r\n]{2,}(?=\*{2}[^*])

(?<=[^*]\*{2})[^*]{2,}(?=\*{2}[^*])
    (?<=[^*]\*{2})([^*]{2,})(?=\*{2}[^*])
        (?<=[^*]\*{2})([^*])({2,}(?=\*{2}[^*]))
        (?<=[^*]\*{2})([^*])({2,})(?=\*{2}[^*])
        (?<=[^*]\*{2})([^*])(({2,})(?=\*{2}[^*]))

?<=[^*]\*([^*\r\n]){2,}?=\*[^*]
?<=[^*]\*([^*\r\n]{2,})?=\*[^*]

([^*]\*{2})[^*]{2,}(*{2}[^*])

([^*]\*{2})([^*\r\n])({2,}*{2}[^*])

(*{2})([^*\r\n])(*{2})

\[^*]\*{2}[^*\r\n]{2,}\*{2}[^*]
(\[^*]\*{2})[^*\r\n]{2,}(\*{2}[^*])
(\[^*]\*{2})[^*\r\n]({2,}\*{2}[^*])
(\[^*]\*{2})[^*\r\n]({2,}(\*{2}[^*]))

\[^*]\*{2}([^*\r\n]){2,}\*{2}[^*]
\[^*]\*{2}([^*\r\n]{2,})\*{2}[^*]

(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
    (?<=[^*]\*)([^*\r\n]){2,}(?=\*[^*])
        
(?<=[^*]\*)[^*\r\n]{2,}(?=\*[^*])
(\*)[^*\r\n]{2,}([^*])
(\*)([^*\r\n]{2,})([^*])


(?<=[^*]\*)([^*\r\n]){2,}(?=\*[^*])
([^*]\*)([^*\r\n])({2,}*[^*])

---
Выделения включая "скобки"
(\**)(.+?)(\**) 

---
Выделения Исключая "скобки"
(?<=\().+?(?=\))
(?<=\()(.*?)(?=\))
 

К.Т.

Участник
Сообщения
323
Реакции
337
Выделение с маркерами
одинарные: (?<=[^*])\*[^*\r\n]{2,}\*(?=[^*])
сдвоенные: (?<=[^*])\*{2}[^*\r\n]{2,}\*{2}(?=[^*])
 
  • Спасибо
Реакции: blacksolg

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Выделение с маркерами
одинарные: (?<=[^*])\*[^*\r\n]{2,}\*(?=[^*])
сдвоенные: (?<=[^*])\*{2}[^*\r\n]{2,}\*{2}(?=[^*])

Спасибо


Добавил скобки чтоб делать замену:
Выделение С маркерами (под замену на $2 ):
одинарные: (?<=[^*])(\*)([^*\r\n]{2,})(\*)(?=[^*])
сдвоенные: (?<=[^*])(\*{2})([^*\r\n]{2,})(\*{2})(?=[^*])

(!) но оба варианта, после замены (на $2), оставляют двойные пробелы,
если выделения содержали пробел после/перед маркером
text_*_txt_*_text ==> text__txt__text



Попробовал убрать лишний пробел:
(?<=[^*])(\*{2}\h)([^*\r\n]{2,})(\h\*{2})(?=[^*])
- для сдвоенных получилось, но к сожалению только как отдельный запрос
- поиск ведется только по выделениям вида **_txt_**

Вариант одинарные - снова не получается:
Схожая конструкция от вариации сдвоенных: (?<=[^*])(\*\h)([^*\r\n]{2,})(\h\*)(?=[^*])
На поиске в тексте:
побоялся изложить *палкан* текст текст * шарик * текст.
начинает выделять середину: * текст текст *
b001.png
что конечно логично: есть звездочка и пробел...
но не правильно по задачам =)
попытки написать GREP к замене и удалению лишних пробелов - не помогли...


Вопросы/решение:
1. возможно есть решение в виде одной строки GREP (как с вариантом к сдвоенным)?
хотя, даже если брать вариацию, где ищутся исключительно только сдвоенные **_txt_**
- то получается, нужно делать в 2 прохода, под одну группу маркеров: **txt** плюс **_txt_**

2. ни разу не слышал, но возможно есть возможность?..
если в "поиск-grep" -> в строке "заменить на" -> к символу $2 добавить
какие-либо переменные которые удаляют 1 знак(пробел, если он есть) перед и после $2

3. или использовать "многопроходность" на весь текст:
- выделение внутри маркеров -> присвоить стиль всему что внутри (с пробелами)
- выделение вместе с маркерами -> удалить маркеры заменой ($2)
- оставшиеся после двойные пробелы удалить отдельным запросом/скриптом

Помогите пожалуйста,
Спасибо!!
 

К.Т.

Участник
Сообщения
323
Реакции
337
Сформулируйте конечную цель относительно исходного текста.
А то чем дальше, тем непонятнее, что вам надо получить.
 
  • Спасибо
Реакции: blacksolg

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Сформулируйте конечную цель относительно исходного текста.
А то чем дальше, тем непонятнее, что вам надо получить.

Благодарю.

Не по теме:
Наверное так будет правильно.
И сам стал понимать..
Из одного вытекает другого, ошибки - множество итераций...

Извините.
Просто понадеялся на свои силы,
В том, что из первоначальной задачи далее смогу модифицировать...
Да грузить форумчан лишним текстом, о "вселенских задачах" - не хорошо.



МАТЕРИАЛ
- личный черновик (*.md дополненный своими маркерами выделений)
- черновик в процессе верстки, может изменить свое содержимое и заново импортироваться
--- логично автоматизировать импорт и обработку разных маркеров = GREP

МАРКЕРЫ
- в данном случае взял самые сложные маркеры представленные в черновике: звездочка
- в тексте, они могут быть как одинарные, так и двойные
- конфликты - плюс попадается отточие в виде трех звезд
- конфликты - сносок вида "экзистенциальность*" (звездочка в конце слова) вроде в тексте не планирую
--- поэтому не беру их в расчет, хоть подстраховать "зад" и правильно

МАРКЕРЫ-применение
1я группа: "редактура" - назначаются внутри "стиль абзаца", помогают выделить рабочие моменты в тексте
2я группа: "верстка" - переносы, отточие, разбивка страниц и тп - "поиск-замена/назначить стиль"
3я группа: "релиз" - к содержанию между маркеров применяются финальные стили (схожие с группой "редактура")

СОДЕРЖАНИЕ МАРКЕРОВ
- текст пишется на разных ПК, на мобильном устройстве.
--- не размерено-урывками, без проверки на орфографию (отдельно, позже)
--- возможны опечатки
- поэтому одинарные и двойные маркеры могут быть выглядеть так:
--- *текст внутри* / * текст внутри * / *текст внутри * / * текст внутри*
--- где пробел "гуляет", после * (в начале выделения), и пробел перед * (в конце выделения)
--- что есть опечатка-ошибка, а не осмысленный-нужный контент.

АЛГОРИТМ
1. "редактура" -> основной текст -> стиль абзаца -> назначить стиль тексту внутри маркеров
2. "верстка" -> поиск-замена-GREP -> "заменить на $2/$3..." и/или назначить стили содержимому внутри маркеров
3. "верстка" -> поиск-замена-GREP -> удалить маркеры из текста (останется текст содержимого+назн. стиль)
4. отключить ненужные "редакционные" grep-стиль из основного стиля абзаца

ИСПОЛНЕНИЕ
- стиль абзаца
- прогонять скриптом в котором можно задавать последовательность исполнение GREP запросов и замен


*Заметки
- назначение стиля происходит как внутри "стиль абзаца", так и прямиком из "поиск-замена-GREP"
- маркеров много, разных, прошу помощи по сложным, остальные постараюсь сделать по подобию, плюс поиск
- скрипты конвертации из *.md - не подходят: не гибки, когда есть и свои маркеры выделения, уже созданные стили
- опечатки-ошибки вида *текст внутри ** - где хрен поймешь какое выделение идет в задачу не беру =)

*По уму
А. писать правильно - не допускать ошибок в виде лишних пробелов
Б. в редакторе где набирается исходник проверять/заменять пробелы внутри маркеров
(но устройства-редакторы разные, а в md редакторах не слишком большой функционал)
С. забить(!) на выделение-удаление лишних пробелов, на етапе удаления маркеров - после очистить весь текст от двойных пробелов (тут у меня сомнения - вроде задач что где-то будут)



Суммируя и обрезая:
- 2 группы маркеров: одинарные и двойные, с учетом наличия в тексте отточий из трех звездочек
- выделение содержимого внутри маркеров (для "стиль абзаца")
- выделение содержимого внутри маркеров (для "поиск-заменить/назначить отдельный стилей по $2-...")
- выделение включая маркеры
--- с целью удаления самих маркеров, с компенсацией-удалением пробелов-ошибок если таковые есть



Не по теме:
PS
Уф
простите...
наверное много.
постарался как можно кратче



-----------------------
***
***
* * *
* * *
* * *

ТЕСТ 1
*выделение*
*выделение* символ
выделение

* курсив *
какой-то текст*

ТЕСТ 2
**выделение**
**выделение** символ
** выделение **

** курсив **
какой-то текст*

** курсив **
какой-то текст**

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

ТЕСТ 3 - ПЕРЕНОСЫ внутри выделений
побоялся изложить ** шапокляк ** текст текст **пикачу** текст. аолвапола проап ао **при-вет**

побоялся изложить ** шапокляк ** текст текст ** пикачу ** текст. аолвапола проап ао *при-вет*

ТЕСТ 4- корявые пробелы
побоялся изложить * крыса* текст текст *тамагочи * текст.
побоялся изложить ** крыса* текст текст **тамагочи ** текст.
-----------------------
 

К.Т.

Участник
Сообщения
323
Реакции
337
Совершенно не хочу вас обидеть, но то, что я вижу, напоминает графоманию (не в ругательном, а в строгом смысле).
Формулировка задачи в подобных случаях занимает пару абзацев максимум, а чаще несколько строк.

Если требуется присвоить символьный стиль участкам текста между звёздочками с удалением звёздочек и возможных краевых пробелов:

- поиск: (?<=[^*])\*{2}\h*([^*\r\n]{2,})\h*\*{2}(?=[^*])
- замена: $1 и стиль

Это для сдвоенных звёздочек.
Для одинарных надо убрать {2} в двух местах.
 
  • Спасибо
Реакции: blacksolg

Gad

Сообщения
2 971
Реакции
1 405

Не по теме:
Я верно понимаю, что Вам нужно втащить markdown текст в ID с сохранением форматирования?
 
  • Спасибо
Реакции: blacksolg

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Совершенно не хочу вас обидеть, но то, что я вижу, напоминает графоманию (не в ругательном, а в строгом смысле).
Формулировка задачи в подобных случаях занимает пару абзацев максимум, а чаще несколько строк.

Если требуется присвоить символьный стиль участкам текста между звёздочками с удалением звёздочек и возможных краевых пробелов:

- поиск: (?<=[^*])\*{2}\h*([^*\r\n]{2,})\h*\*{2}(?=[^*])
- замена: $1 и стиль

Это для сдвоенных звёздочек.
Для одинарных надо убрать {2} в двух местах.


Спасибо!!!

Нет не обидели. Благодарю.
Тем более Вы добавили "напоминает" =)
Потому в начале поста и не стал писать развернуто.
(надеялся своими силами смогу модифицировать)

В два абзаца не уложился - уж побоялся вдруг что упущу/ошибусь.
И краткости не хватило (слабый мозг + жара + grep = каша)
Но две головы лучше чем одна.
Спасибо!



"присвоить символьный стиль участкам текста между звёздочками с удалением звёздочек и возможных краевых пробелов:"
- вы правильно сформировали то что пытался сказать
- лишь еще добавить: "не затрагивая отточие вида ***"



Но есть "опечатка":

двойные
(?<=[^*])\*{2}\h*([^*\r\n]{2,})\h*\*{2}(?=[^*])
= ** текст привет ** == при замене на $1 оставляет после "привет" пробел

одинарные
(?<=[^*])\*{1}\h*([^*\r\n]{2,})\h*\*{1}(?=[^*])
= тоже самое: * текст привет * == после "привет" пробел
 
Последнее редактирование:

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7

Не по теме:
Я верно понимаю, что Вам нужно втащить markdown текст в ID с сохранением форматирования?

Не по теме:
Не совсем:
основа да-markdown, но есть дополнительные маркеры-выделений, т.е. "отсебятина"
и скрипты конвертации из *.md - не подходят: не гибки, когда есть и свои маркеры, уже созданные стили

 

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
(?<=[^*])\*{2}\h*([^*\r\n]+\w)\h*\*{2}(?=[^*])
Низкий поклон Вам К.Т. !
Радовался!

В следующую же ночь, уже тестировал и использовал ваш пример для других маркеров 0=)
Но... "вляпался" на квадратных скобках [[выделяемые строки]]
- сделано почти как у вас
- в варианте с тройными скобками все работает
- а при двойных - всегда идет выделение и по тройным

Подозреваю что конфликт из-за скобок / моего мозга
Помогите поправить запрос: отдельно двойные, отдельно тройные.
Спасибо

Алгоритм
^(?<=[^\[]) (\[{2}\h*\r*\h*) ([\S\s]*?) (\h*\r*\h*\]{2}) (?=[^\]])

Попытки
^(?<=[^\[])(\[{2}\h*\r*\h*)([\S\s]*?)(\h*\r*\h*\]{2})(?=[^\]])
^(?<=[^\[{1}])(\[{2}\h*\r*\h*)([\S\s]*?)(\h*\r*\h*\]{2})(?=[^\]{1}])
^(?<=[^\[{1}])\[{2}\h*\r*\h*([\S\s]*?)\h*\r*\h*\]{2}(?=[^\]{1}])
^(?<=[^*])(\[{2}\h*\r*\h*)([\S\s]*?)(\h*\r*\h*\]{2})(?=[^*])

Работающие тройные
^(?<=[^\[])(\[{3}\h*\r*\h*)([\S\s]*?)(\h*\r*\]{3})(?=[^\]])

с001.png
 

blacksolg

Участник
Топикстартер
Сообщения
249
Реакции
7
Покопавшись в помойке своих мозгов.
И несколько посидок в ночах,
результат на двойные таков:
(?<=[^\[])(\[{2}\h*\r*\h*)([^\[][\S\s]*?)(\h*\r*\]{2})(?=[^\]])
(не претендую на изящество, чем могу, мож кому пригодиться)