Notepad ++ Regex: удалить строки, которые идентичны между началом и определенной строкой, и клип после указанной строки - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь удалить строки, которые идентичны от начала до определенной строки в строке и обрезать все после этой строки.

Пример строки:

http://waterfountain.common.com/12443
http://waterfountain.common.com/243
http://waterfountain.common.com/243
http://glass.common.com/clear
http://glass.common.com/clear
http://1room.common.com/closet/empty

В этом случае я бы хотел сравнить все: от linestart до «common.com», удалить все дубликаты и дополнительно обрезать все после «common.com» или «/".

».

Желаемый конечный результат будет выглядеть так: (с или без "/" в конце)

http://waterfountain.common.com/
http://glass.common.com/

Я нашел частичные решения, но я не знаю, как изменить / объединить их с моими потребностями.

Например, удалить строки, которые полностью идентичны:

^(.*?)$\s+?^(?=.*^\1$)

Edit: Я попробовал решение «Четвертая птица», и хотя оно работает для случая, о котором я говорил, некоторые тесты показали, что бывают случаи, когда оно не удается. (Случаи, которые я забыл упомянуть.)

Возможно, что число появляется после начального "//", например,

http://2eyes.common.com/

Также возможно, что после третьего знака "/" есть буквы, например,

http://snow.common.com/first/

1 Ответ

0 голосов
/ 02 апреля 2019

Для данных вашего текущего примера вы можете использовать группу захвата для захвата непосредственно перед косой чертой и цифру в качестве заданной строки.

Затем сопоставьте с этой точки до конца строки и повторите сопоставление, используя обратную ссылку на группу 1.

^(https?://[^/\n]+)/.*(?:\R\1.*)*

Объяснение

  • ^ Начало строки
  • (https?://[^/\n]+) Группа 1, захват http: // с необязательными значениями s перед первым косой чертой
  • /.* Соответствует косой черте, за которой следует любой символ, кроме новой строки 0+ раз
  • (?: Группа без захвата
    • \R\1.* Соответствует любой последовательности перевода строки в юникоде, обратной ссылке на группу 1 и остальной части строки
  • )* Закрыть группу без захвата и повторить 0+ раз

При замене используется первая группа захвата $1.

Regex demo

Результат

http://waterfountain.common.com
http://glass.common.com
...