Чтобы извлечь только ссылки из текстового файла, выполните регулярное выражение Replace All, используя следующую команду:
Найти что:
.*?(https?:[^"]+)(?(?!.*?https?:).*)
Заменить на:
$1\n\n
Демо 1 1
Обратите внимание, что вам нужно проверить Wrap around
, если точка вставки находится не в начале текста.
Пояснение:
.*?(https?:[^"]+)(?(?!.*?https?:).*)
|_||____________||_________________|
| ____| |
| | ________________|
| | |
| | [3] If there are no more following links, grab and discard the rest of the text
| [2] Store the link in $1 (starting with http and ending just before the first following")
[1] Grab and discard everything up 'til the first link (i.e. starting with http: or https:)
При использовании «Заменить все» поиск и замена автоматически продолжаются до тех пор, пока регулярное выражение не будет соответствовать, начиная с последней точки, в которой данные были сопоставлены, до того момента, который в этом случае был бы непосредственно перед двойной кавычкой в конце текущая ссылка, если есть еще ссылки, или конец текста в противном случае.
Чтобы также извлечь отправителя, используйте следующее:
Найти что:
.*?\{(?:([^"]*)"){4}[^{}]*?(https?:[^"]+)(?(?!.*?https?:).*)
Заменить на:
$1 $2\n\n
Демо 2 2
Пояснение:
Прибытие завтра
Альтернативное регулярное выражение, чтобы сделать то же самое, но, вероятно, немного яснее:
.*?"sender": "([^"]*)[^}]*?(https?:[^"]+)(?(?!.*?https?:).*)
Демо 3 3
Пояснение:
.*?"sender": "([^"]*)[^}]*?(https?:[^"]+)(?(?!.*?https?:).*)
|_||_________||_____||____||____________||_________________|
| ___| ______| ___| _______| _____________|
| | __| ______| ___| _______|
| | | _| _____| ___|
| | | | _| _____|
| | | | | |
| | | | | [6] If there are no more following links, grab and discard the rest of the text
| | | | [5] Store the link in $2 (starting with http and ending just before the first following")
| | | [4] Grab and discard everything within the current set of braces up 'til the link
| | [3] Store the sender name in $1
| [2] Grab and discard "sender": " (i.e. up to the opening quote of the sender name)
[1] Grab and discard everything up 'til the first "sender" key which has an associated link
Шаг [1] работает, первоначально начиная с начала текста и захватывая все до первого ключа отправителя, затем захватывая ключ через [2], захватывая имя отправителя в [3], и захватывая все до связанная ссылка, если она существует в [4]. Если нет связанной ссылки, происходит сбой [5], и регулярное выражение возвращается к шагу [1], который продолжает захватывать все после первого ключа отправителя до второго ключа отправителя. Этот цикл повторяется до тех пор, пока не будет найден ключ отправителя, с которым связана ссылка.
На этом этапе шаг [5] завершается успешно, а затем шаг [6] либо захватывает остальную часть текста, либо ничего.
Наконец, весь захваченный текст заменяется на $1 $2\n\n
, то есть имя отправителя, затем пробел, ссылка, а затем два символа новой строки.
На этом завершается первая «замена». Поскольку был выбран параметр «Заменить все», весь процесс начинается снова, но с указателем текста либо в двойных кавычках в конце ранее найденной ссылки, либо в конце текста, а не в начале.