Regex, удаляя дублирующиеся непрерывные строки - PullRequest
0 голосов
/ 28 августа 2018

Недавно я попытался сделать регулярное выражение для удаления строк, которые стоят друг за другом, не прерываясь другой строкой, и затем оставил только одну строку. Моя работа на данный момент: https://regex101.com/r/Cs0bmY/7. Он должен работать со всеми возможными URL, которые, возможно, не имеют www. перед ними или другим окончанием, как .com или .nl ​​и т. д. Строки (список URL) выглядит так:

operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
operator.livrareflori.md
amazon.de
fonts.gstatic.com
fonts.gstatic.com
fonts.gstatic.com
erovoyeurism.net
tugtechnologyandbusiness.com

Конечный результат должен выглядеть следующим образом:

operator.livrareflori.md
amazon.de
fonts.gstatic.com
erovoyeurism.net
tugtechnologyandbusiness.com

Вы можете видеть, что повторяющиеся строки, которые не прерываются другой строкой, пропадают и остается только 1 результат.

Ответы [ 4 ]

0 голосов
/ 28 августа 2018
((?:https?://)?(?:www\.)?\S+\.\S+)\s(?=[\s\S]*\1)

Вы можете попробовать это. См. Демонстрацию.

https://regex101.com/r/Cs0bmY/11

0 голосов
/ 28 августа 2018

Используя Notepad ++, вы можете сделать:

  • Ctrl + H
  • Найти что: ^(.+)$(?:\R\1)+
  • Заменить на: $1
  • check Wrap вокруг
  • check Регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Пояснение:

^(.+)$      : group 1, a whole line
(?:         : non capture group
    \R      : any kind of line break
    \1      : backreference to group 1
)+          : group must appear 1 or more times

Замена:

$1          : content of group 1

Результат для данного примера:

operator.livrareflori.md
amazon.de
fonts.gstatic.com
erovoyeurism.net
tugtechnologyandbusiness.com
0 голосов
/ 28 августа 2018

Хитрость заключается в том, чтобы захватить линию и использовать предварительный просмотр, чтобы убедиться, что она существует позже в теме. Это выражение соответствует дубликатам, а замена на "" заставляет его сохранять последние вхождения:

(?s)^((?:https?://)?(?:www\.)?\S+\.\S+)\n(?=.*^\1$)

https://regex101.com/r/Cs0bmY/10

0 голосов
/ 28 августа 2018

Вы можете соответствовать

^(.+)$(?:\n\1)+

Захватывая таким образом первую строку и сопоставляя последующие повторяющиеся строки, а затем заменяя все совпадения с первой группой захвата:

\1

(или эквивалентное ключевое слово для первой группы в любой среде, в которой вы находитесь)

https://regex101.com/r/Cs0bmY/8

...