Jump to content

Как использовать шаблоны при замене текста


Recommended Posts

Пытаюсь сделать замену текста через "Найти и заменить" с использованием регулярных выражений.

Как подставить шаблон в окошко "Заменить на"? В подсказке к регулярным выражениям сказано что надо пользоваться свойством Item [0]...[n].

 

Делаю поиск:

(L=1),\d+

Всё благополучно находится.

 

Пробовал подставлять в "Заменить на":

Item [0]

Item[0]

item[0]

Не работает... Что делаю не так?

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
В 18.10.2019 в 16:01, Doctor_Che сказал:

Пытаюсь сделать замену текста через "Найти и заменить" с использованием регулярных выражений.

Как подставить шаблон в окошко "Заменить на"? В подсказке к регулярным выражениям сказано что надо пользоваться свойством Item [0]...[n].

 

Делаю поиск:

(L=1),\d+

Всё благополучно находится.

 

Пробовал подставлять в "Заменить на":

Item [0]

Item[0]

item[0]

Не работает... Что делаю не так?


Насколько я понимаю, регулярные выражения используются для Поиска, для получения набора искомых объектов и выражение Item[n] предназначено для извлечения результата "скобочного" поиска в самом регулярном выражении, а не в строке замены.

Или я ошибаюсь ?

Link to comment
Share on other sites

15 минут назад, A.Kudrjashov сказал:

выражение Item[n] предназначено для извлечения результата "скобочного" поиска в самом регулярном выражении, а не в строке замены.

Как раз нет. "Подборы" сохраняются как раз для использования в поле замены. По крайней мере, так задумано. А как (не) реализовано - не знаю :)

Link to comment
Share on other sites

21 минуту назад, Kreator сказал:

Как раз нет. "Подборы" сохраняются как раз для использования в поле замены. По крайней мере, так задумано. А как (не) реализовано - не знаю :)

Где то можно об этом хоть что-то прочитать ?
Никакой информации не нашел.

То есть предполагается, что будут найдены N объектов и заменены на один из найденных ?
Если просто заменены, то стоит ли игра свеч ?
Если элемент подбора должен использоваться как составляющая замены, то он должен быть частью "выражения замены", а об этом ничего не говорится. Как отличить текст "Item[0]" от выражения "Item[0]" ?

Edited by A.Kudrjashov
Link to comment
Share on other sites

9 минут назад, A.Kudrjashov сказал:

Где то можно об этом хоть что-то прочитать ?
Никакой информации не нашел.

Вот пример использования. Синтаксис от Python, но идея та же: по номеру группы извлекать нужную часть строки.

>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

 

  • Like 1
Link to comment
Share on other sites

Конечно можно почитать - поиск по сочетанию Регулярные выражения. А суть этой фишки в том, что вы можете искать целую строку по её части, и заменять не всё, а только фрагменты. Причём, фрагменты могут быть найдены не статические, а именно по шаблону.

Пример:

Цитата

Железнодорожный путь № 1 ООО «Рога и копыта» не имеет дефектов, угрожающих безопасности движения.

Ищем:

.+№ (.+) ООО «(.+)»

Находим:

изображение.png

изображение.png

Вот группа 1 и группа 2 - это и есть те самые шаблоны совпадения, которые были в скобки внесены в выражении. Соответственно, при замене я могу использовать их для формирования заменяющего текста. По задумке NC должно быть так:

Путь: item[0] Владелец: ООО «item[1]»

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

Edited by Kreator
  • Like 1
Link to comment
Share on other sites

36 минут назад, Doctor_Che сказал:

Вот пример использования. Синтаксис от Python, но идея та же: по номеру группы извлекать нужную часть строки.


>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

 


С идеей использования групп результатов поиска все понятно. Идея хорошая.
Каков синтаксис использования групп результата в строке подстановки ?

Должно быть что-то отличающее оператор Item[0] от литерала "Item[0]".

30 минут назад, Kreator сказал:

долКонечно можно почитать - поиск по сочетанию Регулярные выражения. А суть этой фишки в том, что вы можете искать целую строку по её части, и заменять не всё, а только фрагменты. Причём, фрагменты могут быть найдены не статические, а именно по шаблону.

Пример:

Ищем:


.+№ (.+) ООО «(.+)»

Находим:

изображение.png

изображение.png

Вот группа 1 и группа 2 - это и есть те самые шаблоны совпадения, которые были в скобки внесены в выражении. Соответственно, при замене я могу использовать их для формирования заменяющего текста. По задумке NC должно быть так:

Путь: item[0] Владелец: ООО «item[1]»

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


То есть, наличие в строке замены Item[n] автоматически должно быть командой использования соответствующей группы для подстановки в строку замены ?

Но регулярное выражение применяется для каждого экземпляра массива текстов. То есть, предполагается, что для каждой строки, удовлетворяющей условиям поиска должны быть сформированы свои "группы" и затем "по умолчанию", в случае наличия "item[n]", использоваться для формирования замены в данной конкретной найденной строке ?

Все верно ?
-------------------------------
То есть в начальном сообщении речь шла о том, чтобы заменить все найденные строки содержимым "до запятой" ?

P.S. И все таки. Где почитать ? Не о регулярных выражениях, с ними все понятно, а об их интерпретации в nanoCAD ?
Где то есть официальное упоминание о том, как "все задумано" ?

Edited by A.Kudrjashov
Link to comment
Share on other sites

1 минуту назад, A.Kudrjashov сказал:

... у буржуев тоже ничего не получается
http://forum.nanocad.com/index.php?/topic/639-regular-expressions-find-an-replace/

Да, видел этот пост.

48 минут назад, A.Kudrjashov сказал:

То есть в начальном сообщении речь шла о том, чтобы заменить все найденные строки содержимым "до запятой" ?

Да, была идея таким образом избавиться от дробной части.

  • Like 1
Link to comment
Share on other sites

49 минут назад, A.Kudrjashov сказал:

То есть, наличие в строке замены Item[n] автоматически должно быть командой использования соответствующей группы для подстановки в строку замены ?

Но регулярное выражение применяется для каждого экземпляра массива текстов. То есть, предполагается, что для каждой строки, удовлетворяющей условиям поиска должны быть сформированы свои "группы" и затем "по умолчанию", в случае наличия "item[n]", использоваться для формирования замены в данной конкретной найденной строке ?

Все верно ?

Вероятно. За то, что предполагалось, я не могу отвечать, я с разработчиками никак не связан.

50 минут назад, A.Kudrjashov сказал:

И все таки. Где почитать ? Не о регулярных выражениях, с ними все понятно, а об их интерпретации в nanoCAD ?
Где то есть официальное упоминание о том, как "все задумано" ?

Похоже, что нигде. В указанном англоязычном форуме указано, что функция не реализована. Видимо, ещё не реализована в связи с малым спросом на неё.

Но давайте подождём авторитетное мнение разработчика :)

  • Like 1
Link to comment
Share on other sites

Задал этот вопрос в ООО "Нормасофт".

Ответ такой: "это проблемы именно с платформой, которая у вас установлена. Те такого не должно быть."

 

Кто-нибудь в голом нанокаде может проверить?

Link to comment
Share on other sites

22 минуты назад, Doctor_Che сказал:

Задал этот вопрос в ООО "Нормасофт".

Ответ такой: "это проблемы именно с платформой, которая у вас установлена. Те такого не должно быть."

 

Кто-нибудь в голом нанокаде может проверить?


Только что проверил в голом NanoCAD Plus ...
image.png.9e4d2cab98f651c209a008f3b8f57765.png

 

image.png.9c852a0d9a7155f803f1d27d5d8085d7.png

 

image.png.3d025d7a65e6b8a9799f04ffd62a8ebf.png


... может я что-то не так делаю ?

P.S. Пробовал, как писали буржуи, все варианты: $n, ($n), item[n]. Item[n], [n], ....

Edited by A.Kudrjashov
Link to comment
Share on other sites

Получил ответ от ООО "Нормасофт". Говорят что разработчики им ответили так: "функция на данный момент не реализована, возможно появится в 2020 г".

Жаль что разработчики игнорируют форум и приходится общаться через третьих лиц...

  • Like 1
Link to comment
Share on other sites

47 минут назад, MCAD сказал:

Не представляю, как данным алгоритмом можно реализовать замену.

 

  Хм... (Показать контент)

Вообще странно искать в "графической платформе" функционал полноценной ИПС.  Насколько я знаю подобные запросы настраиваются вручную в более серьёзных решателях чем этот

Скорее это задача не платформы , в "Встроенного нормоконтроля"

 

Это же обычные регулярные выражения. Функция заявлена и даже указано как пользоваться - только не работает...

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...