Załóżmy, że mam następujący ciąg:Python - Jak wyciąć napis w języku Python?
http://www.domain.com/?s=some&two=20
Jak można zdjąć, co jest po &
tym &
i mają ten ciąg:
http://www.domain.com/?s=some
Załóżmy, że mam następujący ciąg:Python - Jak wyciąć napis w języku Python?
http://www.domain.com/?s=some&two=20
Jak można zdjąć, co jest po &
tym &
i mają ten ciąg:
http://www.domain.com/?s=some
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
string = 'http://www.domain.com/?s=some&two=20'
cut_string = string.split('&')
new_string = cut_string[0]
print(new_string)
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.
>>str = "http://www.domain.com/?s=some&two=20"
>>str.split("&")
>>["http://www.domain.com/?s=some", "two=20"]
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 Najlepsza odpowiedź. –
Ładna odpowiedź z dodatkowymi informacjami. +1 –
s[0:"s".index("&")]
co robi to zrobić:
Nie zadziała, jeśli w adresie URL są inne znaki ampersand. – Claudiu
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ć. –
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