2013-02-01 31 views
8

Hôm nay tại nhà ga python, tôi đã cố gắngPython phương pháp dải

a = "serviceCheck_postmaster" 
a.strip("serviceCheck_") 

Nhưng thay vì nhận được "postmaster", tôi đã "postmast".

Điều gì có thể gây ra điều này? Và làm cách nào tôi có thể nhận được "postmaster" làm đầu ra?

Trả lời

18

Bạn hiểu nhầm .strip()nào. Nó xóa bất kỳ của các ký tự được tìm thấy trong chuỗi bạn vượt qua. Từ str.strip() documentation:

Các chars đối số là một chuỗi xác định thiết của nhân vật phải được loại bỏ.

mấu chốt; từ set có ý nghĩa quan trọng.

chars được coi là một bộ, .strip() sẽ loại bỏ tất cả s, e, r, v, i, c, C, h, k_ nhân vật ngay từ đầu và kết thúc của chuỗi đầu vào của bạn. Vì vậy, các ký tự er từ số kết thúc của chuỗi đầu vào của bạn cũng đã bị xóa; các ký tự đó là một phần của tập hợp.

Để loại bỏ một chuỗi từ khi bắt đầu hoặc kết thúc, sử dụng slicing thay vì:

if a.startswith('serviceCheck_'): 
    a = a[len('serviceCheck_'):] 
+3

Để làm rõ điều này trong trường hợp nó không rõ ràng: Python, khi nhìn vào phần cuối của chuỗi, hỏi "Có phải' 'r'' trong ký tự đặt '" serviceCheck_ "'? " Vâng! Xóa đi! "Là' 'e'' trong bộ ký tự '" serviceCheck_ "'? " Vâng! Xóa đi! "Có' 't'' trong bộ ký tự '" serviceCheck_ "'? " Không!Ngừng cắt các thứ từ cuối chuỗi này. –

+0

ok, cảm ơn bạn đã làm rõ, tôi nghĩ rằng nó sẽ dải toàn bộ chuỗi. Nếu có thể, vui lòng đề xuất cho tôi một hướng dẫn tốt để hiểu những điều này –

+0

@ user1960543: Tôi đã liên kết với tài liệu hướng dẫn cho phương pháp; khi nghi ngờ, hãy đọc tài liệu. :-) –

6

Một thay thế cho câu trả lời Martijn để sẽ sử dụng str.replace()

>>> a = "serviceCheck_postmaster" 
>>> a.replace('serviceCheck_','') 
'postmaster' 
+0

mà trong trường hợp này hoạt động, nhưng trong trường hợp của 'serviceCheck_postmaster: serviceCheck_foobar' sẽ làm điều sai trái. –

+0

@MartijnPieters OP không thực sự cung cấp đủ thông tin để bạn chắc chắn rằng anh ấy muốn hành vi của bạn chứ không phải của Harpal trong trường hợp đó - nhưng có lẽ bạn đã đúng. –

+0

@MartijnPieters - Đúng, nhưng bạn có thể làm cho nó làm điều đúng * chỉ bằng cách thay thế sự xuất hiện đầu tiên ('a.replace ('serviceCheck _', '', 1)') ... Nhưng sau đó nó có thể đang làm điều sai trái trong trường hợp của 'postmaster: serviceCheck_foobar' tôi giả sử ... – mgilson

1

Bạn cũng có thể cô lập "postmaster" với một cái gì đó như thế này:

a = "serviceCheck_postmaster" 
b = a.split("_")[1]    # split on underscore and take second item 
+0

Tôi sẽ sử dụng 'str.partition()' để tách chỉ một lần, sau đó. Hoặc ít nhất giới hạn việc chia tách với 'a.split ('_', 1)'. –

3

Nếu bạn cẩn thận xem trợ giúp o f dải chức năng Nó nói như thế này:

Help on built-in function strip: 

strip(...) 
    S.strip([chars]) -> string or unicode 

    Return a copy of the string S with leading and trailing 
    whitespace removed. 
    If chars is given and not None, remove characters in chars instead. 
    If chars is unicode, S will be converted to unicode before stripping 

Nó sẽ loại bỏ tất cả các ký tự đầu và đuôi và khoảng trắng. Trong trường hợp của bạn các bộ ký tự là

s, e, r, v, i, c, C, h, k and _ 

Bạn có thể nhận được bưu điện bởi một cái gì đó giống như

a = "serviceCheck_postmaster" 
print a.split("_")[1] 
1

Strip này sẽ lấy đi tất cả những lá thư bạn nhập vào chức năng của nó. Vì vậy, vì lý do tại sao chữ ‘e’ và ‘r’ bị tước bưu điện. Hãy thử: a = “serviceCheck_postmaster” in (a [13:])

Các vấn đề liên quan