Analyse einer (komplizierten) URL

1226
GPP

Dies ist eine schwierige Aufgabe, die ein Niveau an Excel-Funktionen erfordert, die ich derzeit nicht beherrsche. Ich habe die Excel-Site viel zu lange studiert und bin immer noch nicht auf dem Vormarsch.

Ich versuche eine komplizierte URL zu nehmen, wie:

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

und analysiere es so, dass ich Folgendes bekomme:

live.domain.net

Das nächste, was ich bekommen habe, ist folgendes:

http://dp18776.live.domiain.net

Meine Logik:

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

Der Grund, warum ich dort nicht aufhören kann, ist, dass der lokale Teil über Tausende von Datensätzen hinweg variabel sein kann, während nur die Domäne (z. B. live.domain.net) konstant ist.

Ich weiß auch, dass ich die MID-Funktion verwenden muss. Ich habe getestet, was ich mit grundlegenderen Funktionen erreichen könnte, aber der größere Schlüssel in der Arbeit ist, dass ich in der Lage sein muss, ".net" abzuschließen, um die Domäne abzurufen, also muss ich den Startpunkt in MID () als ".net" - len (Domäne) festlegen

Kann mir jemand helfen, diese Formel auszufüllen?

1
Gibt es immer ein Subnetz? Hat es immer Zahlen? Ist es immer gleich lang? Raystafarian vor 8 Jahren 2
Ja, es gibt immer ein Subnetz, entweder begrenzt durch 2x oder. GPP vor 8 Jahren 0

3 Antworten auf die Frage

4
grawity

Jeder hier scheint sich auf das .comoder zu konzentrieren .net, aber Domänen enden nicht immer mit .comoder .net... aber sie enden immer vor dem /.

So finden Sie zuerst, wo der Hostname beginnt:

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

Dann finden Sie den ersten Schrägstrich danach - hier endet der Hostname :

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

Oder nur für den Fall, dass es überhaupt keinen Pfad gibt:

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

Und alles dazwischen extrahieren:

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

Wenn Sie die ganz linke Domänenkomponente wegwerfen möchten, können Sie Folgendes verwenden 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) 

Für Salesforce ohne Fehlerprüfung:

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

Hinweis: Diese noch hat einige Annahmen - zum Beispiel es nicht richtig funktioniert, wenn die URLs eine hat username@domainoder username:password@domain. Die FIND(".")Version geht außerdem davon aus, dass es mindestens zwei Domänenkomponenten gibt, und funktioniert nicht richtig mit https://example/foo- es erfordert einige zusätzliche IFERROR () - Überprüfungen.

Das ist die beste Antwort. Gute Arbeit, Großzügigkeit. Ich bin hierher gekommen, um etwas hinzuzufügen, aber Sie haben es bereits geschafft. picobit vor 8 Jahren 0
Dito, was @picobit gesagt hat, das ist beeindruckend, danke !! Ich habe nur noch eine Nuance: Wenn ich versuche, als Formelfeld in Salesforce zu importieren, verfügt Salesforce nicht über ein Äquivalent zu IFERROR-Funktionen. Daher muss ich dafür erneut schreiben. Irgendwelche Tipps, wie man am besten umgehen kann? GPP vor 8 Jahren 0
Wenn Sie sicher sind, dass alle URLs einen Pfad haben werden (mindestens ein leerer Pfad, dh "http: // foo /" und nicht "http: // foo"), können Sie IFERROR () vollständig weglassen. Ansonsten erfahren Sie, wie Salesforce Fehler von FIND () oder SEARCH () meldet ... grawity vor 8 Jahren 1
@grawity Von dem, was ich gesehen habe, werden die Felder immer eine Art http://foo.domain.com/string/moreStrings/yetAnotherString/ haben, daher bin ich nicht besonders besorgt. Ich werde aufgehängt, wie man die IFERROR-Anweisung entnistet: Es sieht so aus, als ob IFERROR (FIND ("/", A34, FIND (".", A34) +1), LEN (A34) +1) der Chunk ist , aber der Anweisung folgt ein Minusoperator: - (FIND ("."; A1) +1)) GPP vor 8 Jahren 0
@grawity, mit anderen Worten, ist der String '- (FIND ("."; A1) +1)) "Teil dieser IFERROR-Funktion? GPP vor 8 Jahren 0
@ GPP: Nein, natürlich nicht. Es ist ein regelmäßiges Minuszeichen. (Siehe Bearbeiten) grawity vor 8 Jahren 0
@grawity sicher, aber von was wird diese Aussage abgezogen? GPP vor 8 Jahren 0
@ GPP: Aus dem Rückgabewert von IFERROR (...). grawity vor 8 Jahren 0
Danke Grawity! Ich habe Ihre als Antwort auf die Frage markiert, aber es gibt noch eine weitere Herausforderung: Einige URLs haben folgende Nummern wie folgt: http://13723.live.streamingurl.com:80/VBNCASA_SC, was bedeutet, dass die Zeichenfolge so erscheint : live.streamingurl.com:80 Irgendwelche Vorschläge zur Behebung? Ich kann IFERROR nicht verwenden, aber eine andere verschachtelte IF-Anweisung? GPP vor 8 Jahren 0
3
Evgeny Lebedev

Sie können Regex über VBA verwenden

und bekomme deinen Hostnamen mit so etwas:

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

Gruppe 1:

live.domain.net 
Faszinierend, danke für das Einsteigen! Ich versuche, bei den weniger leistungsfähigen 'LEFT'- und' MID'-Funktionen zu bleiben, da ich letztendlich beabsichtige, daraus ein Salesforce-Formelfeld zu machen (ich wurde hier verwiesen). Ist das eine realistische Erwartung? (Ich schaue mir die Regex-Links auf diesem Antwortlink übrigens an) GPP vor 8 Jahren 0
1
Raystafarian

Ohne zu wissen, wie die Bedingungen für Ihren lokalen Teil sind und wo Ihre Aufhängungen sind, würde ich nach der Erweiterung suchen und dann nach der ersten, .da Sie keine haben www.. Wenn ja, suchen Sie nach dem zweiten .. Ich werde die Teile und dann die tatsächliche Formel bereitstellen.

Suchen Sie nach der gewünschten Erweiterung.

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

Suche nach dem ersten .

=SEARCH(".",A1) 

Dann kombinieren Sie sie in =MID()

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

Wenn es nicht immer einen lokalen Teil gibt, kann es schwieriger werden. Es gibt auch andere Möglichkeiten, dies zu tun, wenn Ihre lokale Zeichenfolge immer dieselbe Länge hat oder immer eine bestimmte Zeichenfolge oder bestimmte Werte usw. hat.

Sie können die iferrorTeile entfernen, wenn Sie die Erweiterung immer kennen, oder Sie können zusätzliche Erweiterungen hinzufügen.