2016-05-07 16 views
0

Ich habe diese Saite:Regex zu finden Links in einer Reihe

http://pastebin.com/XXXXXXXhttp://pastebin.com/XXXXXX\r 

Ich brauche alle Links in einer Zeile zu extrahieren, die mit \ r endet. Es kann einen Link oder sogar fünf Links enthalten. Ich habe so etwas wie dies:

(http[s]*:.*)[\\r|h] 

aber es gibt ganze Reihe als ein Spiel, irgendwelche Ideen?

Antwort

1

können Sie diesen Look-Ahead verwenden basierte regex in findall:

>>> s='http://pastebin.com/XXXXXXXhttp://pastebin.com/XXXXXX\r' 
>>> re.findall(r'https?://.+?(?=https?://|[\r\n]|$)', s) 
['http://pastebin.com/XXXXXXX', 'http://pastebin.com/XXXXXX'] 

(?=http://|[\r\n]|$) ist positive Vorschau die nächste Position behauptet hat http:// oder \r oder \n oder Leitungsende .

RegEx Demo

+1

Bitte kümmern Sie sich auch um 'https' :) – AKS

+0

Danke @AKS, es ist fertig – anubhava

+1

Ja, es wird beides zusammenpassen, da ich' https 'verwende ('s' ist optional) – anubhava

0

geben diesem einen Versuch: (https?:\/\/[^\\r|h]+)

+1

Hat nicht funktioniert, passt nur http: // aus diesen Links – VespaQQ

+0

für mich funktioniert, schauen Sie hier: https://regex101.com/r/xM7fF6/1 – yelsayed

+1

Spalte Spiel erweitern Informationen, nur grüner Text ist eine Übereinstimmung. Es gibt nur zwei Vorkommen von http: // – VespaQQ

0

Versuchen Sie, diese

va = 'http://pastebin.com/XXXXXXXhttp://pastebin.com/XXXXXX\r' 
import re 
vac = re.findall(r"(?:https?:\/+)([^\r|h]+)",va) 
print vac 
0

Sie Regex für diese nicht benötigen. Versuchen Sie dies:

EDIT: Sieht aus wie Sie brauchen nur eine Zeichenfolge nicht die ganze Datei. Führen Sie einfach:

mylinks = [] 
for link in mystring.split('http'): 
    mylinks.append('http'+link) 
Verwandte Themen