2011-11-23 20 views

回答

19

你需要分割字符串:

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

這將返回一個列表,你可以看到,所以你可以這樣做:

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

如果URL中有任何其他&符號,這將不起作用。 – Claudiu

+2

我像大家一樣回答了這個問題,他沒有要求例外。所以要做他給的例子,這是做這件事最簡單的pythonic方法。 –

+0

啊,這是真的。我以爲他問了如何去掉字符串中最右邊的&符號(所以我想如果你給了'string.rsplit('&',1)''會更好,但他並沒有這麼要求。 – Claudiu

4

您可以使用find()

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

O ˚F當然,如果是搜索到的文字將不會存在,那麼您需要編寫更冗長的代碼的機會:

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

雖然你可以使用如下代碼取得一些進展,更復雜的情況需要一個真正的URL解析器。

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

好,回答直接的問題:

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

rfind方法返回最右邊的子字符串的索引:

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

你可以把所有的元素直到達到給定的索引與切片運算符:

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

把兩者結合起來:

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

如果您特別處理URL,您可能需要使用處理URL的內置庫。如果,例如,你想從上面的查詢字符串中刪除two

首先,解析URL作爲一個整體:

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

取出剛剛查詢字符串:

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

把它變成一個dict

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

取出從字典鍵:

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

把它放回一個查詢字符串:

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

現在縫合URL一起回來:

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

這樣做的好處是,你對URL有更多的控制權。就像,如果你總是想刪除two參數,即使它早先放在查詢字符串("two=20&s=some")中,這仍然會做正確的事情。取決於你想要做什麼,這可能是矯枉過正的。

+1

+1最好的答案。 –

+0

很好的答案與額外的信息。 +1 –

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

這是什麼呢:

  • 分得一杯羹從字符串從索引0開始,直到但不包括&字符串中的索引。