Xóa ký tự cuối cùng nếu đó là dấu gạch chéo ngược


78

Có một chức năng để cắt ký tự cuối cùng trong chuỗi nếu đó là một số ký tự đặc biệt? Ví dụ: tôi cần xóa dấu gạch chéo ngược nếu nó ở đó và không làm gì, nếu không. Tôi biết tôi có thể làm điều đó với regex một cách dễ dàng, nhưng tự hỏi liệu có cái gì đó giống như một chức năng tích hợp nhỏ cho điều đó không.


1
Điều gì sẽ xảy ra nếu có nhiều dấu gạch chéo ngược ở cuối chuỗi? Xóa tất cả?
Felix Kling

1
Bạn đã có câu trả lời tốt rồi. Nếu câu hỏi của bạn xuất phát từ nhu cầu tạo một tên tệp thích hợp trong hệ thống tệp, thì os.path.join ( docs.python.org/library/os.path.html#os.path.join ) rất hữu ích
van

Câu trả lời:


136

Sử dụng rstripđể tách (các) ký tự được chỉ định từ phía bên phải của chuỗi.

my_string = my_string.rstrip('\\')

Xem: http://docs.python.org/library/stdtypes.html#str.rstrip


14
... và nó sẽ xóa nhiều hơn một ký tự nếu có nhiều hơn một dấu gạch chéo ngược ở cuối chuỗi.
Tim Pietzcker

@Tim: Điểm tốt là ... Tôi đoán OP nên làm rõ (theo hiểu biết của tôi, nó nên loại bỏ tất cả các "ký tự đặc biệt").
Felix Kling

7
Nếu đây là về việc bình thường hóa tên đường dẫn, thì cách thực hiện trung lập với hệ điều hành là sử dụng dải như đã nói ở trên, nhưng ký tự để dải là os.sep - đó là dấu gạch chéo ngược đối với Windows, dấu gạch chéo ngược đối với Unix.
Chris Johnson

19

Nếu bạn không ngại tất cả các dấu gạch chéo ngược ở cuối bị xóa, bạn có thể sử dụng string.rstrip()

Ví dụ:

x = '\\abc\\'
print x.rstrip('\\')

bản in:

\abc

Nhưng có một vấn đề nhỏ với điều này (dựa trên cách câu hỏi của bạn được diễn đạt): Điều này sẽ loại bỏ TẤT CẢ các dấu gạch chéo ngược ở cuối. Nếu bạn thực sự chỉ muốn ký tự CUỐI CÙNG bị loại bỏ, bạn có thể làm như sau:

if x[-1] == '\\': x = x[:-1]

10

Nếu bạn chỉ muốn xóa một dấu gạch chéo ngược trong trường hợp nhiều dấu gạch chéo ngược, hãy làm như sau:

s = s[:-1] if s.endswith('\\') else s

7
if s.endswith('\\'):
    s = s[:-1]

1
Bạn đã thử cái này chưa? Đó là một lỗi cú pháp. Bạn cần sử dụngif s.endswith('\\')
Tim Pietzcker

1
Nghiêm túc mà nói thì lần nào tôi cũng gặp phải. Các chuỗi thô có ích lợi gì nếu chúng không hoạt động như mong đợi.
Matt Joiner

6

Tuy nhiên, hàm rstrip sẽ loại bỏ nhiều hơn chỉ ký tự cuối cùng. Nó sẽ loại bỏ tất cả các dấu gạch chéo ngược ở cuối chuỗi. Đây là một câu lệnh if đơn giản sẽ chỉ xóa ký tự cuối cùng:

if s[-1] == '\\':
    s = s[:-1]

2

Hoặc không quá đẹp (đừng đánh bại tôi) nhưng cũng có tác dụng:

stripSlash = lambda strVal: strVal[:-1] if strVal.endswith('\\') else strVal
stripSlash('sample string with slash\\')

Và có - rstrip là tốt hơn. Chỉ muốn thử.


1

Chúng ta có thể sử dụng chức năng thay thế tích hợp sẵn

my_str.replace (my_char, '')

my_chars = '\\'    
my_str = my_str.replace(my_char,'')

Điều này sẽ thay thế tất cả \ trong my_str

my_str.replace (my_chars, '', i)

my_char = '\\'
my_str = 'AB\CD\EF\GH\IJ\KL'
print ("Original my_str : "+ my_str)
for i in range(8):
    print ("Replace '\\' %s times" %(i))
    print("     Result : "+my_str.replace(my_chars, '',i))

Điều này sẽ thay thế \ in my_str i lần Bây giờ bạn có thể kiểm soát số lần bạn muốn thay thế nó bằng i

Đầu ra:

Original my_str : AB\CD\EF\GH\IJ\KL
Replace '\' 0 times
     Result : AB\CD\EF\GH\IJ\KL
Replace '\' 1 times
     Result : ABCD\EF\GH\IJ\KL
Replace '\' 2 times
     Result : ABCDEF\GH\IJ\KL
Replace '\' 3 times
     Result : ABCDEFGH\IJ\KL
Replace '\' 4 times
     Result : ABCDEFGHIJ\KL
Replace '\' 5 times
     Result : ABCDEFGHIJKL
Replace '\' 6 times
     Result : ABCDEFGHIJKL
Replace '\' 7 times
     Result : ABCDEFGHIJKL

0

Đối với những người C # kết thúc ở đây:

my_string = my_string.TrimEnd('\\');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.