2011-11-23 36 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开始,直到但不包括&字符串中的索引。