Разбор (сложного) URL

Это сложная задача, требующая уровня мастерства в Excel, которого у меня сейчас нет. Я слишком долго изучал сайт Excel и все еще не прогрессирую.

Я пытаюсь взять сложный URL, как:

http://dp18776.live.domiain.net/active/MO_Mi_WFM

и разобрать, чтобы я получил это:

live.domain.net

Самое близкое, что я получил, с этим:

http://dp18776.live.domiain.net/

Моя логика:

=LEFT(A17, SEARCH(".net",A17)+3)

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

Я также знаю, что мне нужно использовать функцию MID, я тестировал то, с чем я мог справиться, на более основных функциях, но больший ключ в работе заключается в том, что мне нужно иметь возможность отключить ".net", чтобы получить домен, поэтому мне нужно установить начальную точку в MID() как ".net" - len(домен)

Кто-нибудь сможет помочь мне завершить эту формулу?

3 ответа

Решение

Все здесь, кажется, сосредоточены на .com или же .net, но домены не всегда заканчиваются .com или же .net... однако они всегда заканчиваются до /,

Итак, сначала найдите, где начинается имя хоста:

=FIND("://", A1) + LEN("://")
=FIND("://", A1) + 3

Затем найдите первую косую черту - вот где имя хоста заканчивается:

=FIND("/", A1, FIND("://", A1) + 3)

Или, на всякий случай, если пути нет вообще:

=IFERROR(FIND("/", A1, FIND("://", A1) + 3), LEN(A1) + 1)

И извлечь все, что между:

=MID(A1;FIND("://";A1)+3;IFERROR(FIND("/";A1;FIND("://";A1)+3);LEN(A1)+1)-(FIND("://";A1)+3))

A1: https://www.example.com/foo/bar
A2: =FIND("://";A1)+3
A3: =IFERROR(FIND("/";A1;A2);LEN(A1)+1)
A4: =MID(A1;A2;A3-A2)

Если вы хотите выбросить самый левый компонент домена, вы можете использовать FIND(".",A1):

=MID(A1;FIND(".";A1)+1;IFERROR(FIND("/";A1;FIND(".";A1)+1);LEN(A1)+1)-(FIND(".";A1)+1))

A1: https://www.example.com/foo/bar
A2: =FIND(".";A1)+1
A3: =IFERROR(FIND("/";A1;A2);LEN(A1)+1)
A4: =MID(A1;A2;A3-A2)

Для Salesforce без проверок ошибок:

=MID(A1,FIND("://",A1)+3,FIND("/",A1,FIND("://",A1)+3)-(FIND("://",A1)+3))

=MID(A1,FIND(".",A1)+1,FIND("/",A1,FIND(".",A1)+1)-(FIND(".",A1)+1))

Примечание: у этого все еще есть несколько предположений - например, это не будет работать правильно, если URL имеют username@domain или же username:password@domain, FIND(".") версия также предполагает наличие как минимум двух компонентов домена и не будет работать с https://example/foo - для этого нужны дополнительные проверки IFERROR().

Вы можете использовать регулярные выражения через VBA

и получите ваше имя хоста с чем-то вроде этого:

https?:\/\/[a-zA-Z0-9-]+\.([a-zA-Z0-9.-]+)\/.*

группа 1:

live.domain.net

Не зная, каковы условия вашей локальной части и где ваши зависания, я бы искал расширение, а затем первый . как у вас нет www., Если вы делаете - ищите второй ., Я предоставлю детали, а затем фактическую формулу.

Поиск любого расширения, которое вам нужно найти.

=IFERROR((SEARCH(".com",A1)),0)+IFERROR((SEARCH(".net",A1)),0)+IFERROR(SEARCH(".org",A1),0)

В поисках вашего первого .

=SEARCH(".",A1)

Затем объедините их в =MID()

=MID(A1,SEARCH(".",A1)+1,IFERROR((SEARCH(".com",A1)),0)+IFERROR((SEARCH(".net",A1)),0)+IFERROR(SEARCH(".org",A1),0)-SEARCH(".",A1)+3)

Если не всегда есть локальная часть, то это может стать сложнее. Есть также некоторые другие способы сделать это, если ваша локальная строка всегда имеет одинаковую длину или всегда имеет определенную строку, или определенные значения и т. Д.

Вы можете избавиться от iferror порции, если вы всегда знаете расширение, или вы можете добавить дополнительные расширения.

Другие вопросы по тегам