поиск и замена

Russian main discussion
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Re: Вопрос по функционалу: копирование и вставка в нужные по

Post by YuS »

ezjikfrom wrote: Подскажите, пожалуйста, как это сделать в AkelPade
Для начала, дайте пример файла.

Offline
Posts: 6
Joined: Wed May 20, 2015 9:36 am

Post by ezjikfrom »

Вот пример xml. Два товара для примера (там их тысячи). Нужно скопировать ссылку из url в descripshion, добавить к существующей там информации

</offer>
<offer id="2414889" available="true">
<url>http://store.ru/664482</url>
<price>1157</price>
<currencyId>RUB</currencyId>
<categoryId>296</categoryId>
<categoryId>303</categoryId>
<picture>http://babadu.ru/upload/iblock/654/48.jpg</picture>
<name>Ночник Овечка англоязычная VTech</name>
<vendor>VTech</vendor>
<vendorCode>80-074003</vendorCode>
<description><Ночник Овечка англоязычная VTech станет отличным приобретением для вашего крохи.></description>

</offer>
<offer id="2414890" available="true">
<url>http://store.ru/557</url>
<price>1936</price>
<currencyId>RUB</currencyId>
<categoryId>1469</categoryId>
<categoryId>1486</categoryId>
<categoryId>1491</categoryId>
<picture>http://babadu.ru/upload/iblock/2c3/1.jpg</picture>
<name>Обучающая сказка Золушка VTech </name>
<vendor>VTech</vendor>
<vendorCode>80-062056</vendorCode>
<description><Обучающая сказка Золушка VTech - это удивительная книга, в которой так много всего интересного и полезного для малыша.></description>

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

ezjikfrom wrote:Вот пример xml. Два товара для примера (там их тысячи). Нужно скопировать ссылку из url в descripshion, добавить к существующей там информации
По аналогии отсюда (спасибо KDJ):
Скрипт SearchReplace.js
+ Регулярные выражения
+ Заменять на функцию

Code: Select all

Что: (<offer[^>]*>[\s\S]*?<url>)([\s\S]*?)(</url>[\s\S]*?<description>([\s\S]*?)<\/description>[\s\S]*?</offer>)
Чем: return $1 + $2 + ($3).replace(/<description>[\s\S]*?<\/description>/g, "<description>" + " " + $2 + " " + $4 + "<\/description>");

Offline
Posts: 6
Joined: Wed May 20, 2015 9:36 am

Post by ezjikfrom »

Работает! Большое вам спасибо!

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

В использовании [\s\S]*? вместо .*? есть какой-то нюанс?

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

DV wrote:В использовании [\s\S]*? вместо .*? есть какой-то нюанс?
Угу, правила регэкспов в SearchReplace отличаются от правил самого AP, в данном случае .*? не захватит \n, т.е. совпадения не будет найдено.

Offline
Posts: 18
Joined: Fri Feb 24, 2012 1:12 pm

поиск дубликатов

Post by mihanus_sa »

Уже перепробовал весь существующий софт по поиску дубликатов, поэтому вся надежда на Вашу помощь.
Имеется документ на 60000 строк.
пример содержания документа

Code: Select all

^(?i) * Спишь?{0,5}$

Ага! А ответил тебе тогда кто??
Да. Сплю. Во сне печатаю.

^(?i) *Ты (.{1,9})(!{0,})$

Сам $1!
Сам ты $1

^(?i)(.*)((Ч|ш|ф|х)(то|е) (такое|за) )(.{0,15})(!{0,})$

ммм... $6... - это такая штука...
ммм... $6... Ну это...
Сам  не знаю.

^(?i) * Спишь?{0,5}$

Да
Нет
Не очень.
Еще бы.
В документе есть пробелы, которые удалять нельзя. А есть не полные дубликаты, т.е. вопрос

Code: Select all

^(?i) * Спишь?{0,5}$
может повторяться, а ответы будут разные.
Автоматическое удаление дубликатов не пойдёт.
Необходимо найти и подсветить дубликаты(по вопросу или по ответу не важно) в тексте, чтобы можно было их грамотно объединить. Пробовал Format::LineGetDuplicates, Coder::HighLight и FileInfo.js, но необходимого результата не принесло. Вообще возможно ли это? :( Заранее благодарен.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Re: поиск дубликатов

Post by YuS »

mihanus_sa wrote:Вообще возможно ли это? :( Заранее благодарен.
Дубликаты посреди текста найти-то можно, но что с ними делать дальше? Ваша задача либо неполностью описана, либо придется всё разбирать вручную...
Могу предложить построчный поиск дубликатов (т.е. будут искаться дубликаты строк, а не отдельные слова) с дальнейшей вставкой какой-либо метки, но от ручного разбора, всё равно не избавиться.
FindReplaceEx.js
Image

Code: Select all

Что: (^[^\n]*(?<!=====================)$)(\n.*?)\1$
Чем: \1\2\1=====================
В итоге у дубликата строки добавляются символы "===...", а единственный "оригинал" строки остается без маркировки.
Поиск/Замену производить в несколько проходов. Можно кнопкой "Заменить всё", но также в несколько проходов до тех пор, пока не будет "Количество замен: 0".
В общем, где-то так получается:

Code: Select all

^(?i) * Спишь?{0,5}$

Ага! А ответил тебе тогда кто??
Да. Сплю. Во сне печатаю.

^(?i) *Ты (.{1,9})(!{0,})$

Сам $1!
Сам ты $1

^(?i)(.*)((Ч|ш|ф|х)(то|е) (такое|за) )(.{0,15})(!{0,})$

ммм... $6... - это такая штука...
ммм... $6... Ну это...
Сам  не знаю.

^(?i) * Спишь?{0,5}$

Да
Нет
Не очень.
Еще бы.

^(?i) * Спишь?{0,5}$
eue

^(?i) * Спишь?{0,5}$
угу
ага
Да
нет

^(?i) * Спишь?{0,5}$
конечно
НЕТ
нет
да



Code: Select all

^(?i) * Спишь?{0,5}$

Ага! А ответил тебе тогда кто??
Да. Сплю. Во сне печатаю.

^(?i) *Ты (.{1,9})(!{0,})$

Сам $1!
Сам ты $1

^(?i)(.*)((Ч|ш|ф|х)(то|е) (такое|за) )(.{0,15})(!{0,})$

ммм... $6... - это такая штука...
ммм... $6... Ну это...
Сам  не знаю.

^(?i) * Спишь?{0,5}$=====================

Да
Нет
Не очень.
Еще бы.

^(?i) * Спишь?{0,5}$=====================
eue

^(?i) * Спишь?{0,5}$=====================
угу
ага
Да=====================
нет

^(?i) * Спишь?{0,5}$=====================
конечно
НЕТ
нет=====================
да


Offline
Posts: 18
Joined: Fri Feb 24, 2012 1:12 pm

Re: поиск дубликатов

Post by mihanus_sa »

YuS wrote:Дубликаты посреди текста найти-то можно, но что с ними делать дальше?
дальше если встречается два одинаковых запроса например

Code: Select all

^(?i)(.*)((Ч|ш|ф|х)(то|е) (такое|за) )(.{0,15})(!{0,})$
с разными вариантами, то второй запрос удаляется, а различающиеся варианты добавляются к первому. Вручную тоже сойдёт, ведь их можно будет найти по ===================== и почистить
YuS wrote: Могу предложить построчный поиск дубликатов (т.е. будут искаться дубликаты строк, а не отдельные слова) с дальнейшей вставкой какой-либо метки, но от ручного разбора, всё равно не избавиться.
FindReplaceEx.js

Code: Select all

Что: (^[^\n]*(?<!=====================)$)(\n.*?)\1$
Чем: \1\2\1=====================
В итоге у дубликата строки добавляются символы "===...", а единственный "оригинал" строки остается без маркировки.
Поиск/Замену производить в несколько проходов. Можно кнопкой "Заменить всё", но также в несколько проходов до тех пор, пока не будет "Количество замен: 0".
найдёт ли он запрос аналогичный этому

Code: Select all

^(?i)(.*)(((\=)|(\%)\))|(\)\))|O\:\-\)|O\:\)|O\+\)||O\=\)|\;\D).{0,}$
или этому?

Code: Select all

^(?i)(.*)(Пр(и|е|ю).{0,5}(вет|т|в|д|ф|тик|ветствую ).{0,8}|х(а|о|е)й |re|ку|(ку-ку)|hello|q|hi|hey|здоро(в|ф|а(лл|л)оха|холла|хе(лл|л)(оу|о)|\*HI\*).{0,}).{0,}$

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Re: поиск дубликатов

Post by YuS »

mihanus_sa wrote: найдёт ли он запрос аналогичный этому
...
или этому?
...
Вы предлагаете это мне проверять? :)
Пробуйте, тестируйте, проверяйте - могу только подсказать или проверить, если что-то совсем не получается... мне-то это точно не нужно.

Offline
Posts: 18
Joined: Fri Feb 24, 2012 1:12 pm

Re: поиск дубликатов

Post by mihanus_sa »

YuS wrote:Вы предлагаете это мне проверять? :)
Пробуйте, тестируйте, проверяйте - могу только подсказать или проверить, если что-то совсем не получается... мне-то это точно не нужно.
нет, но идея с пометкой отличная, вот только после долгого выполнения Количество Замен: 0

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Re: поиск дубликатов

Post by YuS »

mihanus_sa wrote: вот только после долгого выполнения Количество Замен: 0
Ну, с этим ничего не сделать, т.к. регулярка с многостроковым захватом любых символов, не позволит алгоритму автоматически возвращаться к началу, для проверки того, что было захвачено... даже при условии наличия опции "по кругу".
Но есть выход, можно воспользоваться пакетами, т.е. один шаблон несколько раз добавить в пакет и затем запустить этот пакет. В общем, количество строк в пакете и количество запусков пакета можно варьировать, т.е. опытным путем подобрать оптимальное сочетание...

Offline
Posts: 18
Joined: Fri Feb 24, 2012 1:12 pm

Re: поиск дубликатов

Post by mihanus_sa »

YuS wrote:можно воспользоваться пакетами, т.е. один шаблон несколько раз добавить в пакет и затем запустить этот пакет. В общем, количество строк в пакете и количество запусков пакета можно варьировать, т.е. опытным путем подобрать оптимальное сочетание...
а нельзя просто маску поиска более универсальной?

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Re: поиск дубликатов

Post by YuS »

mihanus_sa wrote:а нельзя просто маску поиска более универсальной?
Нет, не получится. Такова логика работы регэкспов.

Offline
Posts: 18
Joined: Fri Feb 24, 2012 1:12 pm

Re: поиск дубликатов

Post by mihanus_sa »

YuS wrote:есть выход, можно воспользоваться пакетами, т.е. один шаблон несколько раз добавить в пакет и затем запустить этот пакет. В общем, количество строк в пакете и количество запусков пакета можно варьировать, т.е. опытным путем подобрать оптимальное сочетание...
расскажите, пожалуйста, по подробнее что и как сделать
а то я, честно говоря, впервые про добавление пакетов слышу
Post Reply