2008-09-16 12 views
6

Ein Tutorial Ich habe auf Regex in Python erklärt, wie man das RE-Modul in Python, wollte ich die URL aus einem A-Tag zu greifen, so Regex Ich schrieb den richtigen Ausdruck und testete es in meinem Regex-Test-App der Wahl und sichergestellt, dass es funktioniert. Wenn es in Python platziert wurde, ist es fehlgeschlagen.Python und "re"

Nach viel Kopf kratzen ich das Problem herausgefunden, es erwartet automatisch Ihr Muster am Anfang der Zeichenfolge. Ich habe ein Update gefunden, aber ich würde gerne wissen, wie sie ändern:

regex = ".*(a_regex_of_pure_awesomeness)" 

in

regex = "a_regex_of_pure_awesomeness" 

Okay, es ist ein Standard-URL Regex aber ich wollte über eine mögliche Verwirrung zu vermeiden, was ich wollte loswerden und möglicherweise vorgeben, lustig zu sein.

Antwort

19

In Python unterscheidet man zwischen "Übereinstimmung" und "Suche"; match sucht nur nach dem Muster am Anfang der Zeichenfolge und sucht nach dem Muster, das an einer beliebigen Stelle innerhalb der Zeichenfolge beginnt.

Python regex docs
Matching vs searching

1

Verwenden Sie die Methode re.match() oder re.search()? Mein Verständnis ist, dass re.match() ein "^" am Anfang Ihres Ausdrucks annimmt und nur am Anfang des Textes sucht, während re.search() eher wie die regulären Ausdrücke von Perl funktioniert und nur den Anfang berücksichtigt des Textes, wenn Sie am Anfang Ihres Ausdrucks ein "^" einfügen. Ich hoffe, das hilft.

3
>>> import re 
>>> pattern = re.compile("url") 
>>> string = " url" 
>>> pattern.match(string) 
>>> pattern.search(string) 
<_sre.SRE_Match object at 0xb7f7a6e8> 
1

Sie wahrscheinlich von den verschiedenen Methoden gestolpert werden re.search und re.match.

4
from BeautifulSoup import BeautifulSoup 

soup = BeautifulSoup(your_html) 
for a in soup.findAll('a', href=True): 
    # do something with `a` w/ href attribute 
    print a['href']