Analisando um URL (complicado)

1

Este é um problema complicado que requer um nível de domínio das funções do Excel que não tenho atualmente. Eu tenho estudado o site do Excel há muito tempo e ainda não estou progredindo.

Estou tentando usar uma URL complicada como:

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

e analise-o para que eu tenha isso:

live.domain.net

O mais próximo que cheguei é com isto:

http://dp18776.live.domiain.net

Minha lógica:

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

A razão pela qual não posso parar por aí é porque a parte local pode ser variável em milhares de registros, enquanto apenas o domínio é (por exemplo, live.domain.net) constante.

Eu também sei que eu preciso usar a função MID, eu estava testando o que eu poderia fazer em funções mais básicas, mas o maior problema nos trabalhos é que eu preciso ser capaz de digitar ".net" para recuperar o domínio, então eu preciso definir o ponto de partida em MID () como ".net" - len (domínio)

Alguém poderia me ajudar a completar essa fórmula?

    
por GPP 09.04.2016 / 08:12

3 respostas

4

Todos aqui parecem se concentrar no .com ou .net , mas os domínios nem sempre terminam com .com ou .net ... no entanto, eles sempre terminam antes do / .

Primeiro, encontre onde o nome do host começa:

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

Em seguida, encontre a primeira barra depois - é aí que o nome do host termina :

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

Ou, caso não haja nenhum caminho:

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

E extraia tudo entre:

=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)

Se você quiser descartar o componente de domínio mais à esquerda, use 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)

Para o Salesforce, sem verificações de erros:

=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))

Observação: esse ainda tem algumas suposições - por exemplo, não funcionará corretamente se os URLs tiverem username@domain ou username:password@domain . A versão FIND(".") também assume que há pelo menos dois componentes de domínio e não funcionará corretamente com https://example/foo - ele precisa de algumas verificações adicionais de IFERROR () para isso.

    
por 09.04.2016 / 13:25
3

Você pode usar o regexp via VBA

e obtenha seu nome de host com algo assim:

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

grupo 1:

live.domain.net
    
por 09.04.2016 / 08:34
1

Sem saber quais são as condições da sua parte local e onde estão os seus bloqueios, pesquisei a extensão e, em seguida, o primeiro . , pois você não tem www. . Se você fizer isso - procure o segundo . . Eu fornecerei as partes e depois a fórmula atual.

Procurando por qualquer extensão que você precise encontrar.

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

Pesquisando seu primeiro .

=SEARCH(".",A1)

Em seguida, combine-os em =MID()

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

Se nem sempre houver uma parte local, ela poderá ficar mais complicada. Existem também outras maneiras de fazer isso se a string local tiver sempre o mesmo tamanho ou sempre tiver uma string específica ou determinados valores, etc.

Você pode se livrar das porções iferror se você sempre conhece a extensão ou pode adicionar extensões adicionais.

    
por 09.04.2016 / 11:11