2013-03-08 14 views
6
embed_url = 'http://www.vimeo.com/52422837' 
response = re.search(r'^(http://)?(www\.)?(vimeo\.com/)?([\/\d+])', embed_url) 
return response.group(4) 

La risposta è:Python regex estratto vimeo id da url

5 

Speravo in

52422837 

Chiunque un'idea? Sono davvero male con regex: S

risposta

4

Usa \d+ (senza parentesi) in base alle cifre letterali barra +:

response = re.search(r'^(http://)?(www\.)?(vimeo\.com/)?(\d+)', embed_url) 

Risultato:

>>> re.search(r'^(http://)?(www\.)?(vimeo\.com/)?(\d+)', embed_url).group(4) 
'52422837' 

si stesse utilizzando un gruppo di caratteri ([...]) dove nessuno era necessario. Il modello [\/\d+] corrisponde esattamente a uno di /, + o una cifra.

+0

Questo funziona .. Ottimo .. Grazie! –

0

Hai provato a terminare il regexp con un simbolo di dollaro ($)?

1

per ottenere tutto dopo l'ultima barra (ammesso che ve ne sia uno) la seguente semplice regex dovrebbe farlo:

[^/]*$ 

(afferra avidamente tutto fino alla fine, che non è una barra.)

10

Non reinventare la ruota!

>>> import urlparse 
>>> urlparse.urlparse('http://www.vimeo.com/52422837') 
ParseResult(scheme='http', netloc='www.vimeo.com', path='/52422837', params='', 
query='', fragment='') 

>>> urlparse.urlparse('http://www.vimeo.com/52422837').path.lstrip("/") 
'52422837' 
+0

È possibile che l'OP esegua la ricerca in un corpo di testo più ampio. –

+0

Il nome della variabile suggerisce che OP sta cercando un URL. –

+2

E se fosse un esempio semplificato ai fini della domanda (quale sarebbe una cosa intelligente da fare quando si fa una domanda su SO)? –