Nano Hash - криптовалюты, майнинг, программирование

Сохранить все строки списка с одинаковым началом (Notepad++)

Из списка, как сохранить все вхождения только тех строк, чья "первая часть или начало" (определяемая от начала строки до символа ^) присутствует в других строках? (Шаблон строк в списке: начало строки^rest_of_line_012345)

Тип символов, длина и т. д. после ^ не имеют значения (но их необходимо сохранить). В каждой строке есть только один (1) символ ^. "Начальная" строка, определяющая идентификатор, должна присутствовать в той же (аналогичной) позиции в других строках (т. е. от начала строки до ^ и должна быть полным соответствием). (Строки содержат символы, которые мешают регулярному выражению, такие как \/()*., поэтому их необходимо экранировать.)

Например: Исходный список:

abc^123
0xyz^xxx
aaa-123^123
aaa-12^0xyz
0xyz^098
00xyz^098
0xyz^x111xx

Сохраняйте все вхождения строк с одинаковой первой частью:

0xyz^xxx
0xyz^098
0xyz^x111xx

Этот элегантный сценарий от @Lars Fischer ((.*)\R(\2\R?)+)*\K.* (после предварительной сортировки) сохраняет все вхождения повторяющихся строк, но учитывает всю строку (это было разработано для этого).

В этом вопросе я ищу решение, которое учитывает только «начало» строки, чтобы увидеть, встречается ли оно более одного раза, и если да, то сохранить всю строку. Любое руководство?


  • В вашем вопросе есть только одна закономерность. Он также спрашивает, присутствуют ли несколько шаблонов? Уточните, пожалуйста, больше образцов данных. 17.10.2017
  • Интересно, зачем доводить это до крайности, используя подход только с регулярными выражениями, если это можно сделать с помощью awk, perl или python менее сложным способом? 18.10.2017
  • Пере шаблон. В моем случае всегда есть один (1) единственный уникальный символ (^) в строке, который служит разделителем для начала и остальной части строки. Re regex подход: это было бы самым простым, так как я много работаю с Notepad++. Perl-скрипт был бы решением, с которым я тоже могу жить. 18.10.2017

Ответы:


1

Примечание: в этом решении используются символы # и %, исходя из предположения, что эти символы не отображаются НИГДЕ в файле с самого начала. Если это не ваш случай, просто используйте другие шаблоны, которые, как вы знаете, нигде в файле не отображаются, например ##### и %%%%%.

Начните с лексикографической сортировки файла с помощью Notepad ++, выбрав «Правка» -> «Операции со строками» -> «Сортировать строки по лексикографическому возрастанию».

Выполните регулярное выражение «Найти и заменить» (СНЯТЬ флажок «. соответствует новой строке»):

Найти то, что:

^(.*?)\^[^\r\n]+[\r\n]+(\1\^.*?[\r\n]+)*\1\^.*?$

Заменить:

#$&%

Теперь выполните еще одно регулярное выражение «Найти и заменить» (УСТАНОВИТЕ поле «. соответствует новой строке»):

Найти то, что:

%.*?#

Заменить:

\r\n

Наконец, выполните последнее регулярное выражение «Найти и заменить» (УСТАНОВИТЕ поле «. соответствует новой строке»):

Найти то, что:

^.*?#|%.*

Заменить ничем.

08.12.2017

2

Вы сказали в комментариях, что Perl-скрипт вам подходит.

#!/usr/bin/perl
use Modern::Perl;

my %values;
my $file = 'path/to/file';
open my $fh, '<', $file or die "unable to open '$file': $!";
while(<$fh>) {
    chomp;
    # get the prefix value
    my ($prefix) = split('\^', $_);
    # push in array the whole line in hash with the prefix as key
    push @{$values{$prefix}}, $_;
}
foreach (keys %values) {
    # skip the prefix tat have only one line
    next if scalar @{$values{$_}} == 1;
    local $" = "\n";
    say "@{$values{$_}}";
}

Вывод:

0xyz^xxx
0xyz^098
0xyz^x111xx
09.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..