Регулярные выражения
- Author
- Message
-
Offline
- Posts: 96
- Joined: Tue Nov 10, 2015 4:56 am
YuS
приношу извинения, забыл отписаться, постоянно вспоминал, но что-то не давало возможности...
спасибо, нужную работу совершило
правда пришлось кой-что поправить и сделать немного по другому
изначально как было, так и я не смог сделать - двузначные и одиночные цифры обрабатывало не так как трехзначные, пришлось несколькими регулярками после обработать, и всё сделалось как мне и нужно было...
спасибо
приношу извинения, забыл отписаться, постоянно вспоминал, но что-то не давало возможности...
спасибо, нужную работу совершило
правда пришлось кой-что поправить и сделать немного по другому
изначально как было, так и я не смог сделать - двузначные и одиночные цифры обрабатывало не так как трехзначные, пришлось несколькими регулярками после обработать, и всё сделалось как мне и нужно было...
спасибо
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Так ведь, как корабль назовешь, так он и поплывет... в смысле, как условие было составлено, так код и работаетInFive wrote: правда пришлось кой-что поправить и сделать немного по другому
изначально как было, так и я не смог сделать - двузначные и одиночные цифры обрабатывало не так как трехзначные, пришлось несколькими регулярками после обработать, и всё сделалось как мне и нужно было...
а для
\d+
- абсолютно без разницы, одно-, двух-, трех- или многозначное число, главное в той части - разделители. В условии задачи, это были запятые... ну и набор символов " ZZZ ", от них всё и зависит.
ЗЫ
Перепроверил...
А-а-а, вот почему оно не "стреляло".
Изначально вот в этом месте:
Code: Select all
c[b].replace(/((\d+).\d+)/g,"$1 $2")
Code: Select all
c[b].replace(/((\d+)—\d+)/g,"$1 $2")
В общем, замените всё так, как было изначально и получите то, что требовалось.
ЗЫЫ
В исходном сообщении исправил, вдруг кому ещё пригодится...
Last edited by YuS on Mon May 28, 2018 2:46 pm, edited 1 time in total.
-
Offline
- Posts: 96
- Joined: Tue Nov 10, 2015 4:56 am
прошу прощения, но это опять я...
нужна помощь - помогите составить функцию, чтобы заменялось генератором случайных значений в hex-диапазоне, чтобы
ZZZZZ
заменялось на случайные значения в виде
397790f1-afc8-4524-810a-c0f8f11c38da
первая группа - 8 символов
вторая по четвертую - по 4 символа
пятая группа - 12 символов
нужна помощь - помогите составить функцию, чтобы заменялось генератором случайных значений в hex-диапазоне, чтобы
ZZZZZ
заменялось на случайные значения в виде
397790f1-afc8-4524-810a-c0f8f11c38da
первая группа - 8 символов
вторая по четвертую - по 4 символа
пятая группа - 12 символов
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Т.е. нужен генератор GUID... надо было так и написатьInFive wrote: нужна помощь - помогите составить функцию, чтобы заменялось генератором случайных значений в hex-диапазоне, чтобы
ZZZZZ
заменялось на случайные значения в виде
397790f1-afc8-4524-810a-c0f8f11c38da
первая группа - 8 символов
вторая по четвертую - по 4 символа
пятая группа - 12 символов
генерируем четверки и складываем их в требующуюся строку:
SearchReplace.js
[v] Регулярные выражения
[v] Многострочно
[v] Заменять на функцию
Code: Select all
Что: ZZZZZ
Чем: function guid(){function t(){return Math.floor((1+Math.random())*0x10000).toString(16).substring(1);}return t()+t()+'-'+t()+'-'+t()+'-'+t()+'-'+t()+t()+t();} return guid();
-
Offline
- Posts: 96
- Joined: Tue Nov 10, 2015 4:56 am
думал, уже сегодня буду генерировать GUID с помощью функции, которую здесь помогли составить, но не тут та было - превращая обычный текстовый документ в json сложной структуры, все таки не все смог продумать, начинать редактировать сначала не вариант из-за долгой и кропотливой работы, хотя и делать промежуточные бекапы...YuS wrote:Вот так, гораздо точнее...InFive wrote: мне нужно пометить строки, в которых третья цифра изменена по сравнению с третьей цифрой из предыдущей строки
TextReplace.js
[v] Регулярные выражения
[v] Заменять на функцию
Замену осуществлять один раз: "Заменить всё", после чего, при необходимости повторной замены, либо в другой вкладке, необходимо закрыть окно скрипта и открыть вновь - для удаления временной переменной.Code: Select all
Что:^'\d+',\s'\d+',\s'(\d+)[^\n]* Чем:if (typeof(n) == "undefined" || n == parseInt(_s1)) {n=parseInt(_s1);return _s0} else {n=parseInt(_s1);return _s0+"====="}
В принципе, ничего страшного, если не закрывать, но тогда в самой первой совпавшей с шаблоном строке, придется снимать пометку вручную.
одна надежда на вас - почему данную функцию не могу использовать для отлова совпадают/не совпадают слова?
например,
T3T3T3ZZZZZохрана 512 QQQF4
T3T3T3ZZZZZохрана 513 QQQF4
T3T3T3ZZZZZохрана 630-632 QQQF4
T4T4T4ZZZZZзащита 240 QQQF5
T4T4T4ZZZZZзащита 272 QQQF5
T3T3T3ZZZZZпомощь 139 QQQF4
T3T3T3ZZZZZпомощь 140 QQQF4
T3T3T3ZZZZZпомощь 360 QQQF4
использую
T\dT\dT\dZZZZZ(.+)\t\t\t
на
if (typeof(n) == "undefined" || n == parseInt(_s1)) {n=parseInt(_s1);return _s0} else {n=parseInt(_s1);return "=====" + _s0}
но помечаются все строки, а мне нужно чтобы только строки, в которых по сравнению с предыдущей изменяются слова после ZZZZZ перед тремя табами
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
-
Offline
- Posts: 96
- Joined: Tue Nov 10, 2015 4:56 am
YuS
я неоднократно использовал эту функцию для отлова изменения цифр в разных исходных комбинациях, но вот изменить ее для отлова изменения в словах у меня не хватает знаний...
помогите, пожалуйста, составить фонкцию для отлова изменений слов, закончить не могу документ в 57 тысяч строк из-за непредвиденной проблемы
я неоднократно использовал эту функцию для отлова изменения цифр в разных исходных комбинациях, но вот изменить ее для отлова изменения в словах у меня не хватает знаний...
помогите, пожалуйста, составить фонкцию для отлова изменений слов, закончить не могу документ в 57 тысяч строк из-за непредвиденной проблемы
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
В этой функции используется метод конвертации строки в число, поэтому слов там не будет...InFive wrote:YuS
я неоднократно использовал эту функцию для отлова изменения цифр в разных исходных комбинациях, но вот изменить ее для отлова изменения в словах у меня не хватает знаний...
Здесь требуются уточнения по условиям... т.е. что именно требуется найти и пример массива строк в котором содержится то, что требуется найти, а также содержатся строки, где нет искомого набора символов.InFive wrote: помогите, пожалуйста, составить фонкцию для отлова изменений слов, закончить не могу документ в 57 тысяч строк из-за непредвиденной проблемы
-
Offline
- Posts: 5
- Joined: Wed Oct 31, 2018 8:05 am
не работает шаблон поиска
hi all,
есть текстовый файл в котором содержится текст на английском и русском языках, количество строк примерно 14000, строки отсортированны и многие повторяются. Задача удалить все дубликаты.
нашел шаблон регулярного выражения для решения этой задачи, который на ура справляется с этой задачей в notepad++
^(.*?)$\s+?^(?=.*^\1$)
Но при запуске его в akelpad прога виснет наглухо, остановить операцию поиска и замены невозможно, приходится принудительно завершать работу программы.
В чем грабли? Почему в notepad++ операция занимает буквально секунды, а в akelpad этот шаблон не работает, хотя согласно описанию akelpad поддерживает регулярные выражения при поиске и замене текста?
есть текстовый файл в котором содержится текст на английском и русском языках, количество строк примерно 14000, строки отсортированны и многие повторяются. Задача удалить все дубликаты.
нашел шаблон регулярного выражения для решения этой задачи, который на ура справляется с этой задачей в notepad++
^(.*?)$\s+?^(?=.*^\1$)
Но при запуске его в akelpad прога виснет наглухо, остановить операцию поиска и замены невозможно, приходится принудительно завершать работу программы.
В чем грабли? Почему в notepad++ операция занимает буквально секунды, а в akelpad этот шаблон не работает, хотя согласно описанию akelpad поддерживает регулярные выражения при поиске и замене текста?
Last edited by konstazhoglo on Thu Nov 01, 2018 1:14 pm, edited 1 time in total.
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
Re: не работает шаблон поиска
1. Тот шаблон, что вы тут написали, он и в notepad++ не работает.konstazhoglo wrote:hi all,
есть текстовый файл в котором содержится текст на английском и русском языках, количество строк примерно 14000, строки отсортированны и многие повторяются. Задача удалить все дубликаты.
нашел шаблон регулярного выражения для решения этой задачи, который на ура справляется с этой задачей в notepad++
^(.*?)$^(?=.*^\1$)
Но при запуске его в akelpad прога виснет наглухо, остановить операцию поиска и замены невозможно, приходится принудительно завершать работу программы.
В чем грабли? Почему в notepad++ операция занимает буквально секунды, а в akelpad этот шаблон не работает, хотя согласно описанию akelpad поддерживает регулярные выражения при поиске и замене текста?
Вероятно при переписывании допущена ошибка.
Если хотели убрать ТОЛЬКО ТЕКСТ в повторяющихся строках, то можно оставить так:
Code: Select all
^(.*?)$(?=.*^\1$)
Чтобы убирать повторяющиеся строки ЦЕЛИКОМ, шаблон придётся "нарастить":
Code: Select all
^(.*?)$\s+?^(?=.*^\1$)
Code: Select all
Format::LineRemoveDuplicates
-
Offline
- Posts: 5
- Joined: Wed Oct 31, 2018 8:05 am
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
А ответы Вы читаете полностью?konstazhoglo wrote:спасибо за совет.
Да я ошибся при вставке шаблона, вставил не тот.
Работает вот этот шаблон ^(.*?)$\s+?^(?=.*^\1$) в notepad++
Вопрос остается открытым почему эта строка поиска не работает в akelpad? Ограничений на нее нет и в руководстве указано, что редактор поддерживает рекэкспы.
Найдите 10 отличий:
Code: Select all
1. ^(.*?)$\s+?^(?=.*^\1$)
2. ^(.*?)$\s+?^(?=.*^\1$)
Второй - напечатали Вы Чт Ноя 01, 2018 6:34 pm, с указанием того, что он якобы не работает.
Где логика?
Как бы подсказка:
Code: Select all
(?-s)^(.*?)$\s+?^(?=.*^\1$)
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
YuS,
Мне кажется, что данная поправка менее универсальна (будет работать только с отсортированным списком).
Поэтому наоборот, вместо (?-s) использовал бы (?s). В предыдущем ответе не использовал ни того ни другого, как минимум, по двум причинам:
1. Т.к. у меня по дефолту выставлена опция регулярных выражений [точка захватывает \n].
2. Исходя из того, что согласно первоначальным условиям список уже отсортирован, то данная опция в любом варианте избыточна.
Мне кажется, что данная поправка менее универсальна (будет работать только с отсортированным списком).
Поэтому наоборот, вместо (?-s) использовал бы (?s). В предыдущем ответе не использовал ни того ни другого, как минимум, по двум причинам:
1. Т.к. у меня по дефолту выставлена опция регулярных выражений [точка захватывает \n].
2. Исходя из того, что согласно первоначальным условиям список уже отсортирован, то данная опция в любом варианте избыточна.