2011-11-23 30 views

risposta

19

è necessario dividere la stringa:

>>> s = 'http://www.domain.com/?s=some&two=20' 
>>> s.split('&') 
['http://www.domain.com/?s=some', 'two=20'] 

che restituirà un elenco come si può vedere in modo da poter fare:

>>> s2 = s.split('&')[0] 
>>> print s2 
http://www.domain.com/?s=some 
5
string = 'http://www.domain.com/?s=some&two=20' 
cut_string = string.split('&') 
new_string = cut_string[0] 
print(new_string) 
+0

Questo non funzionerà se ci sono altri e commerciali nell'URL. – Claudiu

+2

Ho risposto alla domanda come tutti, non ha chiesto un'eccezione. Quindi, per fare l'esempio che ha dato, questo è il modo più semplice per farlo. –

+0

Ah questo è vero. Pensavo che avesse chiesto come togliere la parte commerciale più giusta in una stringa (quindi stavo pensando sarebbe meglio se tu dessi 'string.rsplit ('&', 1)'), ma non lo ha chiesto necessariamente. – Claudiu

4

È possibile utilizzare find()

>>> s = 'http://www.domain.com/?s=some&two=20' 
>>> s[:s.find('&')] 
'http://www.domain.com/?s=some' 

O Naturalmente f, se c'è una possibilità che il ricercato per il testo non sarà presente allora avete bisogno di scrivere più lunghe code:

pos = s.find('&') 
if pos != -1: 
    s = s[:pos] 

Sebbene si possa fare qualche progresso usando codice come questo, le situazioni più complesse richiedono un vero e proprio Parser dell'URL.

2
>>str = "http://www.domain.com/?s=some&two=20" 
>>str.split("&") 
>>["http://www.domain.com/?s=some", "two=20"] 
35

Beh, per rispondere alla domanda immediata:

>>> s = "http://www.domain.com/?s=some&two=20" 

.210 metodo restituisce l'indice della più a destra stringa:

>>> s.rfind("&") 
29 

Si può prendere tutti gli elementi fino a un determinato indice con l'operatore per affettare:

>>> "foobar"[:4] 
'foob' 

Mettendo le due cose insieme:

>>> s[:s.rfind("&")] 
'http://www.domain.com/?s=some' 

Se si tratta in particolare di URL, è possibile che si desideri utilizzare le librerie incorporate che gestiscono gli URL.Se, per esempio, si voleva rimuovere two dalla stringa di query di cui sopra:

In primo luogo, analizzare l'URL nel suo complesso:

>>> import urlparse, urllib 
>>> parse_result = urlparse.urlsplit("http://www.domain.com/?s=some&two=20") 
>>> parse_result 
SplitResult(scheme='http', netloc='www.domain.com', path='/', query='s=some&two=20', fragment='') 

Estrarre solo la stringa di query:

>>> query_s = parse_result.query 
>>> query_s 
's=some&two=20' 

trasformarlo in un dict:

>>> query_d = urlparse.parse_qs(parse_result.query) 
>>> query_d 
{'s': ['some'], 'two': ['20']} 
>>> query_d['s'] 
['some'] 
>>> query_d['two'] 
['20'] 

Rimuovere il 'two' chiave dal dict:

>>> del query_d['two'] 
>>> query_d 
{'s': ['some']} 

rimetterlo in una stringa di query:

>>> new_query_s = urllib.urlencode(query_d, True) 
>>> new_query_s 
's=some' 

E ora punto l'URL di nuovo insieme:

>>> result = urlparse.urlunsplit((
    parse_result.scheme, parse_result.netloc, 
    parse_result.path, new_query_s, parse_result.fragment)) 
>>> result 
'http://www.domain.com/?s=some' 

Il vantaggio di questo è che si avere più controllo sull'URL. Ad esempio, se si desidera sempre rimuovere l'argomento two, anche se è stato inserito precedentemente nella stringa della query ("two=20&s=some"), ciò farebbe comunque la cosa giusta. Potrebbe essere eccessivo a seconda di ciò che si vuole fare.

+1

+1 Una risposta eccellente. –

+0

Bella risposta con informazioni extra. +1 –

1
s[0:"s".index("&")] 

Cosa fa questo:

  • prendere una fetta dalla stringa a partire dall'indice 0, fino a, ma non incluso l'indice del & nella stringa.
Problemi correlati