假设我有以下字符串:
http://www.domain.com/?s=some&two=20
我怎样才能去掉 &
之后的内容,包括 &
并拥有这个字符串:
http://www.domain.com/?s=some
最佳答案
好吧,回答最直接的问题:
>>> 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']
从字典中删除 '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"
),这仍然可以正确的事情。这可能是矫枉过正,这取决于你想做什么。
关于Python - 如何在 Python 中剪切字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247792/