2011-11-23 12 views

Odpowiedz

19

Trzeba podzielić ciąg:

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

To zwróci listę jak widać więc można zrobić:

>>> 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

Nie zadziała, jeśli w adresie URL są inne znaki ampersand. – Claudiu

+2

Odpowiedziałem na pytanie jak wszyscy, nie poprosił o wyjątek. Tak więc, aby zrobić przykład, który podał, jest to najprostszy sposób, aby to zrobić. –

+0

Ah to prawda. Myślałem, że zapytał, jak zdjąć najdłuższą ampersandę w sznurku (myślę, że byłoby lepiej, gdybyś podał 'string.rsplit ('&', 1)'), ale nie pytał o to koniecznie. – Claudiu

4

Można użyć find()

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

O f Oczywiście, jeśli jest szansa, że ​​szukany tekst nie będzie obecny, to musisz napisać więcej długi kod:

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

Chociaż można poczynić pewne postępy przy użyciu kodu takiego, bardziej złożone sytuacje wymagają prawdziwa Analizator adresów URL.

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

Dobrze, aby odpowiedzieć na natychmiastowe pytanie:

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

The rfind metoda zwraca indeks prawej skrajnej podciągu:

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

można wziąć wszystkie elementy do danego indeksu z operatorem krojenia:

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

strzelaj dwa razem:

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

Jeśli szczególnie dotyczy to adresów URL, warto skorzystać z wbudowanych bibliotek obsługujących adresy URL.Jeśli, na przykład, że chcesz usunąć two z powyższego łańcucha zapytania:

pierwsze, analizowania URL jako całość:

>>> 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='') 

Wyjąć tylko ciąg kwerendy:

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

przekształcić go w dict:

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

Zdjąć 'two' klucz od dict:

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

umieścić go z powrotem w ciągu zapytania:

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

A teraz ściegu URL wraz z powrotem:

>>> 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' 

Korzyść z tego jest to, że ciebie mieć większą kontrolę nad adresem URL. Na przykład, jeśli zawsze chciałeś usunąć argument two, nawet jeśli został wcześniej wstawiony w ciągu zapytania ("two=20&s=some"), to nadal by się udało. Może to być przesada w zależności od tego, co chcesz zrobić.

+1

+1 Najlepsza odpowiedź. –

+0

Ładna odpowiedź z dodatkowymi informacjami. +1 –

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

co robi to zrobić:

  • wziąć kawałek z łańcucha zaczynając od indeksu 0, aż do, ale nie w tym indeksie & w ciąg.