如果最后一个字符是反斜杠,则删除该字符。

100

如果字符串的最后一个字符是某个特殊字符,是否有一种函数可以将其去除?例如,如果有反斜杠,则需要将其删除;否则不做任何处理。我知道可以使用正则表达式轻松完成此操作,但想知道是否有类似于小型内置函数的东西。


1
如果字符串末尾有多个反斜杠怎么办?全部删除吗? - Felix Kling
8个回答

169

23
如果字符串末尾有多个反斜杠,它会删除超过一个字符的反斜杠。 - Tim Pietzcker
@Tim:很好的观点...我猜OP应该澄清一下(据我理解,它应该删除所有“特殊字符”)。 - Felix Kling
7
如果这是关于规范化路径名的问题,实现跨操作系统的方法是使用上文提到的 strip 函数,并将要去除的字符设为 os.sep -- 在 Windows 上是反斜杠,在 Unix 上是正斜杠。 - Chris Johnson

26

如果您不介意删除所有尾随的反斜杠,可以使用 string.rstrip()

例如:

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

输出:

\abc

但是这种方法有个小问题(根据你的问题描述而言):它将会移除所有尾部反斜杠。如果你只想移除最后一个字符,你可以像这样处理:

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

15

如果你只想在有多个反斜杠的情况下删除一个,可以尝试以下方法:

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

9
rstrip函数不仅仅会删除最后一个字符,它还会删除字符串末尾的所有反斜杠。这是一个简单的if语句,只会删除最后一个字符:
if s[-1] == '\\':
    s = s[:-1]

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

1
你试过这个吗?这是一个语法错误。你需要使用 if s.endswith('\\') - Tim Pietzcker
1
我每次都遇到这个问题。原始字符串有什么意义,如果它们不能按预期工作呢? - Matt Joiner

2
或者不那么美观(不要打我)但也可以使用:
stripSlash = lambda strVal: strVal[:-1] if strVal.endswith('\\') else strVal
stripSlash('sample string with slash\\')

没错,rstrip更好。只是想试一下。


1
我们可以使用内置函数replace

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

-1

对于来到这里的C#开发者:

my_string = my_string.TrimEnd('\\');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接