2017-04-24 4 views
1

Ich versuche RegEx zu verwenden, um einen bestimmten Teil von URLs zu extrahieren, die in verschiedenen Variationen enthalten sind. Hier ist das generische Format:Extrahieren eines Teils einer URL mithilfe von RegEx

http://www.blackpages.com/cityName-StateName/mip/part-I-want-to-extract/randomCharacters 

manchmal, dass "mip" -Teil nicht existiert und die URL sieht wie folgt aus:

http://www.blackpages.com/cityName-StateName/part-I-want-to-extract/randomCharacters 

Ich schreibe folgendes RE gestartet:

re.compile("blackpages\.com/.*") 

Die .* entspricht einem beliebigen Zeichen. Nun, wie höre ich auf, wenn ich auf ein "/" stoße und alles extrahiere, was folgt, bevor das nächste "/" angetroffen wird? Dies würde mir den Teil geben, den ich extrahieren möchte.

+0

Rakesh, mehr Sorgen? Bitte zögern Sie nicht, eine Zeile unterhalb meiner Antwort zu schreiben. –

Antwort

1

Sie brauchen eine negierte Zeichenklasse verwendet wird:

re.compile(r"blackpages\.com/([^/]*)") 
          ^^^^ 

Die [^/]* wird 0+ Zeichen anders als /, so viele wie möglich (Gierig) entsprechen.

Wenn Sie mindestens ein Zeichen nach / erwarten, + quantifier (1 oder mehr Vorkommen) statt * verwenden.

anzeigen regex demo

Python code:

import re 
rx = r"blackpages\.com/([^/]*)" 
ss = ["http://www.blackpages.com/cityName-StateName/mip/part-I-want-to-extract/randomCharacters", 
"http://www.blackpages.com/cityName-StateName/part-I-want-to-extract/randomCharacters"] 
for s in ss: 
    m = re.search(rx, s) 
    if m: 
     print(m.group(1)) 

Ausgang:

cityName-StateName 
cityName-StateName 
+0

Sollten Sie damit nicht Erfassungsgruppen verwenden, um nur diesen Teil zu extrahieren? – Rahul

+0

Ich habe auch die Gruppe und den Code hinzugefügt. –

Verwandte Themen