Python - 如何在Python中剪切字符串?

时间:2011-11-23 19:12:46

标签: python string

假设我有以下字符串:

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

如何取消包含&的{​​{1}}之后的内容并使用此字符串:

&

6 个答案:

答案 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("&")]

这是做什么的:

  • 从索引0开始的字符串中取一个切片,最多但不包括字符串中的&索引。