1

Это сложная задача, требующая уровня мастерства в 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 ответа3

4

Все здесь, кажется, сосредоточены на .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().

3

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

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

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

группа 1:

live.domain.net
1

Не зная, каковы условия вашей локальной части и где ваши зависания, я бы искал расширение, а затем первое . как у вас нет 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 если вы всегда знаете расширение, или вы можете добавить дополнительные расширения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .