Ребята, помогите неучу)
Как в большом тхт файле удалить всё, кроме строк в квадратных скобках? Сами скобки можно и не удалять.
Простейшее вроде)
Например:
[Blob Storage *]
LangSecRef=3029
Detect1=HKCU\Software\7Star\7Star
Detect2=HKCU\Software\360Browser\Browser
...и тд..
вот нужно оставить только [Blob Storage *] и последующие такие же
Posted: Sun Nov 22, 2020 1:53 pm
by AZJIO
\].+?\[
заменить на ][
Posted: Sun Nov 22, 2020 4:55 pm
by opk44
FiLinX
Если имеете дело только с такими "вырожденными"* случаями, как представлено в вашем примере, то проще использовать стандартный скрипт "LinesFilter.js"
* под "невырожденными" здесь подразумеваю:
1) строки внутри строк
Неуч подаёт рапорт на выделение внеочередной благодарности участникам AZJIO и opk44 !! )
Оба варианта работают - Спасибо!
Posted: Thu Dec 10, 2020 3:03 pm
by kekos
Находил тут решение для рандомного перемешивания строк. Но, возможно ли реализовать рандомное перемешивание, назову это - "групп строк" (при этом количество самих строк в каждой группе может быть разным)? Есть файл такого вида:
var text = AkelPad.GetTextRange(0, -1, 2 /*\n*/);
var groups = text.match(/(\?.(.|\n)*?)(?=\n\?|$)/g);
shuffle(groups);
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(text);
function shuffle(arr) {
var i = arr.length;
while(--i) {
var rnd = Math.floor(Math.random()*(i + 1));
var tmp = arr[i];
arr[i] = arr[rnd];
arr[rnd] = tmp;
}
}
var text = AkelPad.GetTextRange(0, -1, 2 /*\n*/);
var addLF = !/\n$/.test(text);
if(addLF)
text += "\n";
var groups = text.match(/(\?.(.|\n)*?)(?=\n\?|$)/g);
shuffle(groups);
var out = groups.join("\n");
if(addLF)
out = out.slice(0, -1);
replaceText(out);
function shuffle(arr) {
var i = arr.length;
while(--i) {
var rnd = Math.floor(Math.random()*(i + 1));
var tmp = arr[i];
arr[i] = arr[rnd];
arr[rnd] = tmp;
}
}
function replaceText(text) {
var oSys = AkelPad.SystemFunction();
var hWndEdit = AkelPad.GetEditWnd();
setRedraw(hWndEdit, false);
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(text);
setRedraw(hWndEdit, true);
function setRedraw(hWnd, bRedraw) {
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}
}
(?=\n\?|$) – для захвата последней группы.
Весь несоответствующий регулярному выражению текст теряется.
В первом варианте необходимо наличие перевода строки после последней группы.
Posted: Fri Dec 11, 2020 7:44 pm
by kekos
Infocatcher, на форуме не заметил системы репутации, так что напишу в посте - Спасибо! Второй скрипт работает идеально.
Posted: Mon Jun 28, 2021 10:13 am
by pol-zhuk
подскажите, пожалуйста
задача следующая:
"текст Х
текст2 Х текст3 У"
нужно привести к:
"текст Z
текст2 Х текст3 У", где Z - разность Х-У (нецелые числа)
Posted: Fri Jul 02, 2021 4:35 pm
by cellleexx
Здравствуйте!
Подскажите, пожалуйста, регулярку чтобы найти и заменить фрагмент текста, который выделен на картинке
Спасибо!
Posted: Fri Jul 09, 2021 6:48 pm
by Infocatcher
cellleexx
Не совсем понятно, форматируется ли base64-строка принудительными переводами строк, но можно попробовать вот так:
Вот в том и дело, что там переводы строк, я не знал как сделать. Такую строку в поле поиска я не осилил. Первый вариант сработал!
Спасибо тебе тебе добрый человек, Infocatcher ты мне очень помог! Счастья тебе и удачи и всего наилучшего)!
Posted: Thu Jul 15, 2021 2:39 pm
by cellleexx
Как выделить для замены найденую строку плюс (например) две предыдущие верхние и одну следующую нижнюю?
Спасибо!
Posted: Thu Jul 15, 2021 2:51 pm
by opk44
cellleexx
1. Ну так-то было бы нелишним приводить тестовые примеры в виде текста, а не изображения. Это бы упростило жизнь отвечающим (меньше предположений строить).
2. Если, как оказалось, "там переводы строк", то можно (теперь) предположить, что все "лишние" строки (кроме первой) начинаются с пробела.
Если это так, тогда ещё можно использовать "вилку" из двух регулярных выражений: 1) искать строку, начинающуюся с "PHOTO;" 2) искать строку, начинающуюся с пробела:
UPD.: Вообще-то я, скорее всего, не прав. Такой метод можно использовать только если искомый блок идет под удаление. Если же его нужно чем-то заменить, то "фрагментировать" блок на строки нельзя.
Posted: Thu Jul 15, 2021 3:04 pm
by opk44
cellleexx wrote:Как выделить для замены найденую строку плюс (например) две предыдущие верхние и одну следующую...
Красивого решения в голову не приходит, но можно попробовать искать "механически": "X строка"+"X строка"+"Y строка"+"X строка"