Видаліть останній символ, якщо це зворотна коса риса


78

Чи існує функція chomp останнього символу в рядку, якщо це якийсь спеціальний символ? Наприклад, мені потрібно видалити зворотну косу риску, якщо вона є, і нічого не робити, якщо ні. Я знаю, що можу зробити це з регулярним виразом легко, але цікаво, чи є для цього щось на зразок невеликої вбудованої функції.


1
Що робити, якщо в кінці рядка є кілька зворотних скісних рисок? Видалити їх усіх?
Фелікс Клінг,

1
Ви вже отримали хороші відповіді. Якщо ваше запитання випливає з необхідності створити належне ім'я файлу у файловій системі, тоді os.path.join ( docs.python.org/library/os.path.html#os.path.join ) стане в нагоді
van

Відповіді:


136

Використовуйте rstripдля зняття вказаних символів з правої сторони рядка.

my_string = my_string.rstrip('\\')

Див .: http://docs.python.org/library/stdtypes.html#str.rstrip


14
... і він видалить більше одного символу, якщо в кінці рядка є більше однієї косої риски.
Тім Пітцкер,

@Tim: Хороша думка ... Я думаю, OP має роз'яснити (на мою думку, він повинен видалити всі "спеціальні символи").
Фелікс Клінг,

7
Якщо мова йде про нормалізацію імен шляхів, нейтральний для ОС спосіб це зробити, використовуючи смужку, як зазначено вище, але символ для видалення - це os.sep - це коса коса риса для Windows, коса коса риса для Unix.
Chris Johnson,

19

Якщо ви не проти видалити всі зворотні косі риски, можна скористатися string.rstrip()

Наприклад:

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

відбитки:

\abc

Але з цим є невелика проблема (заснована на формулюванні вашого запитання): це позбавить ВСІХ зворотних скісних скісних рисок. Якщо ви дійсно хочете лише ОСТАННІ символи, щоб їх позбавили, ви можете зробити щось подібне:

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

10

Якщо ви хочете видалити лише одну зворотну скісну риску у випадку кількох, виконайте щось на зразок:

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

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

1
Ви спробували це? Це синтаксична помилка. Вам потрібно скористатисяif s.endswith('\\')
Тім Пітцкер

1
Серйозно щоразу натрапляю на це. Якого біса суть необроблених рядків, якщо вони працюють не так, як очікувалося.
Matt Joiner

6

Однак функція rstrip видалить не лише останній символ. Він видалить усі зворотні скісні риски з кінця рядка. Ось просте твердження if, яке видалить лише останній символ:

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

2

Або не такий гарний (не бийте мене), але також працює:

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

І так - rstrip краще. Просто хочу спробувати.


1

Ми можемо використовувати вбудовану функцію заміни

my_str.replace (my_char, '')

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

Це замінить усі \ в 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))

Це замінить \ у my_str i разів. Тепер ви можете контролювати, скільки разів ви хочете замінити його на i

Вихід:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.