1

Тема: AHK: Удаление дубликатов строк

Пример удаляет дубликаты строк без сортировки, удаляя дубли в начале списка. Как задать удаление дублей в конце списка?

var=
(
345678
345678
123456
234567
234567
456789
456789
567891
123456
234567
567891
345678
123456
123456
123456
)
MsgBox, % RegExReplace(var,"sm`a)^(.*)\1\K^(\R|$)|^(.*)(\R|$)(?=.*^\3)")

2

Re: AHK: Удаление дубликатов строк

Я не очень понял, какого результата вы хотите добиться в итоге, что должно остаться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: john_dease, 2023-05-10 22:33:49)

Re: AHK: Удаление дубликатов строк

В примере присутствуют одинаковые строки, и в результате работы скрипта одинаковые строки удаляются начиная с начала списка, так что единственная уникальная строка остаётся в том месте списка, где она изначально была последней. Добиться хотелось бы, чтобы происходило наоборот: чтобы дубли удалялись снизу списка, а образец уникальной строки оставался вверху списка.

4

Re: AHK: Удаление дубликатов строк

А зачем для данной задачи вы используете регулярку?

5

Re: AHK: Удаление дубликатов строк

Воспользовался готовым кодом.

6

Re: AHK: Удаление дубликатов строк

Парсите построчно и создавайте новый список, проверяя была ли уже данная строка  в новом списке.
Либо пытайтесь понять, что делает данная комплексная регулярка и переделывайте ее под свои нужды (рекомендую избегать таких сложных).

7 (изменено: teadrinker, 2023-05-10 02:33:18)

Re: AHK: Удаление дубликатов строк

В любом случае первое выражение сильно избыточно:

var =
(
345678
345678
123456
234567
234567
456789
456789
567891
123456
234567
567891
345678
123456
123456
123456
)
MsgBox, % RegExReplace(var, "`asm)^(\V*)\R(?=.*^\1$)")

Как сделать удаление с конца, пока что не придумал.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Удаление дубликатов строк

И первое выражение и второе неверно:

var =
(
34567
345678
)
MsgBox, % RegExReplace(var, "`asm)(^\V*+)\R?(?=.*\1)")

9

Re: AHK: Удаление дубликатов строк

Так вроде работает:

MsgBox, % RegExReplace(var, "`asm)^(\V*)\R(?=.*^\1$)")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Удаление дубликатов строк

teadrinker пишет:

Как сделать удаление с конца, пока что не придумал.

Похоже, вряд ли такое можно сделать одной регуляркой. Но можно регуляркой в цикле:

Loop
   var := RegExReplace(var, "`asm)^(\V*)$.*\K\R\1$",, count)
until !count
MsgBox, % var
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder