2011-11-23 37 views

Trả lời

19

Bạn cần phải tách chuỗi:

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

Đó sẽ trả về một danh sách như bạn có thể thấy, do đó bạn có thể làm:

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

Điều này sẽ không hoạt động nếu có bất kỳ ký hiệu nào khác trong URL. – Claudiu

+2

Tôi trả lời câu hỏi như mọi người, anh ta không yêu cầu ngoại lệ. Vì vậy, để làm ví dụ ông đã đưa ra, đây là cách pythonic đơn giản nhất để làm điều đó. –

+0

Ah đó là sự thật. Tôi nghĩ anh ấy đã hỏi làm thế nào để lấy ra dấu phẩy bên phải trong một chuỗi (vì vậy tôi đã nghĩ sẽ tốt hơn nếu bạn đưa ra 'string.rsplit ('&', 1)'), nhưng anh ta không hỏi điều đó nhất thiết. – Claudiu

4

Bạn có thể sử dụng find()

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

O f Tất nhiên, nếu có một cơ hội mà các tìm kiếm văn bản sẽ không có mặt thì bạn cần phải viết mã dài hơn:

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

Trong khi bạn có thể làm cho một số tiến bộ sử dụng mã như thế này, các tình huống phức tạp hơn đòi hỏi một sự thật Trình phân tích cú pháp URL.

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

Vâng, để trả lời câu hỏi ngay lập tức:

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

.210 phương thức trả về chỉ số của phải nhất substring:

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

Bạn có thể thực hiện tất cả các yếu tố lên đến một chỉ số được đưa ra với các nhà điều hành cắt:

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

Đưa hai với nhau:

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

Nếu bạn đang xử lý các URL cụ thể, bạn có thể muốn sử dụng các thư viện tích hợp xử lý URL.Nếu, ví dụ, bạn muốn loại bỏ two từ chuỗi truy vấn trên:

Thứ nhất, phân tích cú pháp URL như một toàn thể:

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

Đi ra chỉ là chuỗi truy vấn:

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

Biến nó thành một dict:

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

Xóa 'two' chủ chốt từ dict:

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

Đặt nó trở lại thành một chuỗi truy vấn:

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

Và bây giờ khâu URL trở lại với nhau:

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

Lợi ích của việc này là bạn có nhiều quyền kiểm soát hơn đối với URL. Giống như, nếu bạn luôn muốn xóa đối số two, ngay cả khi nó được đặt trước đó trong chuỗi truy vấn ("two=20&s=some"), điều này vẫn sẽ làm điều đúng. Nó có thể là quá mức cần thiết tùy thuộc vào những gì bạn muốn làm.

+1

+1 Câu trả lời hay nhất. –

+0

Câu trả lời hay với thông tin bổ sung. +1 –

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

những gì hiện làm điều này:

  • mất một lát từ chuỗi bắt đầu từ chỉ số 0, lên đến, nhưng không bao gồm các chỉ số của & trong chuỗi.
Các vấn đề liên quan