RegEx для извлечения первого появления доменов - PullRequest
1 голос
/ 17 мая 2019

У меня есть список доменов в каждой строке, как это

www.google.dk/

www.google.dk/

www.google.com/

www.google.de/

www.google.dk/

www.google.dk/

Я хочу только первое вхождение каждого домена, как это:

www.google.dk/

www.google.com/

www.google.de/

Я смотрю везде с похожими темами, но не могу найти то, что мне подходит.

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Хотя такого рода задачи должны быть легко выполнены с использованием кода, как я описал в моем комментарии выше, который помещает все ваши URL в коллекцию Set, которая исключит все дубликаты, а затем просто итерирует Set дляполучите ваши уникальные URL.

Но если из-за некоторых ограничений вам понадобится чистое решение для регулярных выражений, вы можете использовать это регулярное выражение,

(\S+)(?![\w\W]*\1)

, которое будет захватывать повторяющиеся URL только один раз, потому что этот URLпо сути захватывает последнюю строку среди дубликатов.

Regex Объяснение:

  • (\S+) - захватить URL с помощью \S+, потому что URL не могутсодержат пробелы внутри себя
  • (?![\w\W]*\1) - И этот негативный взгляд гарантирует, что захваченная строка в group1 больше не будет видна где-либо вперед, используя обратную ссылку \1 и [\w\W] - способ сопоставления любого символа, включая символ новой строкиХотя вы можете достичь того же, используя точку, но затем вам нужно включить режим DOTALL, поместив (?s) в начале регулярного выражения илиПередача дополнительного аргумента флага в выборе вашего языка, если он поддерживает один.

Regex Demo

0 голосов
/ 17 мая 2019

Если у него нет совпадения first , но также может быть совпадение last (т. Е. Вам нужен только уникальный домен), вы можете использовать отрицательный прогноз сснова совпадающая группа.

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

(Использование ([^\n]+) для сопоставления домена, использование того факта, что каждый домен находится в одной строке; в этом месте вы также можете использовать более сложное регулярное выражение для сопоставления доменов.)

Regex-101 Demo

www.google.dk/
www.google.dk/
www.google.com/  match
www.google.de/   match
www.google.dk/
www.google.dk/   match
0 голосов
/ 17 мая 2019

Этот RegEx должен работать для вас.

(? <= Www.) [Az.0-9] + (? = /) | (? <= https://)[a -z.0-9] + (? = /) | (? <= http://)[a -z.0-9] + (? = /) | ^ [Az.0-9] + (? = /) </p>

Кобъясните, я разобью его на части.

  1. положительный взгляд сзади - (? <=) / (? <= "вот что вы ищете") </p>

  2. позитивный поиск строчных букв, точек и цифр в любых случаях [az.0-9] +

  3. позитивный прогноз - (? =) / (? = "вот что вы ищете ")

  4. или - |

искать" www. "(? <= www.) </p>

соответствует любым вхождениям строчных букв, точек и цифр между "www." И "/"
[az.0-9] +

lookahead для "/" (? =/)

или |

после того, как все пойдет так же, я меняю только значения для вида сзади

Я надеюсь, что помог.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...