假设我有以下字符串:
http://www.domain.com/?s=some&two=20
如何取消包含&
的{{1}}之后的内容并使用此字符串:
&
答案 0 :(得分:44)
好吧,回答当前的问题:
>>> 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']
从dict中删除'two'
键:
>>> 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 :(得分:26)
您需要拆分字符串:
>>> 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
答案 2 :(得分:6)
string = 'http://www.domain.com/?s=some&two=20'
cut_string = string.split('&')
new_string = cut_string[0]
print(new_string)
答案 3 :(得分:4)
您可以使用find()
>>> s = 'http://www.domain.com/?s=some&two=20'
>>> s[:s.find('&')]
'http://www.domain.com/?s=some'
当然,如果搜索的文本有可能不存在,那么你需要编写更冗长的代码:
pos = s.find('&')
if pos != -1:
s = s[:pos]
虽然您可以使用这样的代码取得一些进展,但更复杂的情况需要一个真正的URL解析器。
答案 4 :(得分:2)
>>str = "http://www.domain.com/?s=some&two=20"
>>str.split("&")
>>["http://www.domain.com/?s=some", "two=20"]
答案 5 :(得分:1)
s[0:"s".index("&")]
这是做什么的: