Supponiamo che io ho la seguente stringa:Python - Come tagliare una stringa in Python?
http://www.domain.com/?s=some&two=20
Come posso prendere via quello che è dopo &
compreso il &
e avere questa stringa:
http://www.domain.com/?s=some
Supponiamo che io ho la seguente stringa:Python - Come tagliare una stringa in Python?
http://www.domain.com/?s=some&two=20
Come posso prendere via quello che è dopo &
compreso il &
e avere questa stringa:
http://www.domain.com/?s=some
è 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
string = 'http://www.domain.com/?s=some&two=20'
cut_string = string.split('&')
new_string = cut_string[0]
print(new_string)
È 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.
>>str = "http://www.domain.com/?s=some&two=20"
>>str.split("&")
>>["http://www.domain.com/?s=some", "two=20"]
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 Una risposta eccellente. –
Bella risposta con informazioni extra. +1 –
s[0:"s".index("&")]
Cosa fa questo:
Questo non funzionerà se ci sono altri e commerciali nell'URL. – Claudiu
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. –
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