2017-03-07 5 views
-2

zu ignorieren Ich habe eine Regex, um eine URL wie http://www.test.com innerhalb body zu erhalten, die der Inhalt einer E-Mail ist.Python - Regex alles in <>

Allerdings kann es auch URLs in diesem Format sein: <http://www.test.com> Ich versuche, den folgenden regulären Ausdruck zu bearbeiten alles innerhalb dieser Symbole <>

url = re.search('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', body) 
+0

Es könnte einfacher sein, Regex dafür nicht zu verwenden. – khelwood

+0

Was wäre Ihre Alternative? Ich dachte, dass ich vielleicht versuchen würde, alles innerhalb von <> zu entfernen, bevor ich die Zeichenfolge in den regulären Ausdruck übertrage. – dperrie

+0

Dies kann mit einem sehr, sehr einfachen Wechsel erfolgen. Suche nach "regex lookarounds". Oder nur Regex-Tutorials im Allgemeinen. Deine Regex ist überkompliziert und redundant und hat mit ziemlicher Sicherheit einen Fehler, den du nicht bemerkt hast (Tipp: Das '-' in' [$ -_ @. & +] ') –

Antwort

2

Wenn Sie tun dies mit RegEx bestehen zu ignorieren, dann ist diese kann erreicht werden ein negative lookbehind mit:

(?<!<) 

So ist die volle reguläre Ausdruck wird wie folgt aussehen:

(?<!<)http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+ 
+0

Ah ja, ich lese gerade ein Tutorial zum Umsehen! Funktioniert perfekt, danke! – dperrie

Verwandte Themen