【问题标题】:Remove last character if it's a backslash如果是反斜杠,则删除最后一个字符
【发布时间】:2011-07-05 15:07:02
【问题描述】:

如果字符串中的最后一个字符是一些特殊字符,是否有一个函数可以剔除字符串中的最后一个字符?例如,如果有反斜杠,我需要删除它,如果没有,我什么也不做。我知道我可以很容易地使用正则表达式来做到这一点,但想知道是否有类似的小型内置函数。

【问题讨论】:

  • 如果字符串末尾有多个反斜杠怎么办?全部删除?
  • 你已经得到了很好的答案。如果您的问题来自需要在文件系统中创建正确的文件名,那么 os.path.join (docs.python.org/library/os.path.html#os.path.join) 会派上用场

标签: python string


【解决方案1】:

使用rstrip 去除字符串右侧的指定字符。

my_string = my_string.rstrip('\\')

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

【讨论】:

  • ...如果字符串末尾有多个反斜杠,它将删除多个字符。
  • @Tim:好点...我想 OP 应该澄清一下(据我了解,它应该删除所有“特殊字符”)。
  • 如果这是关于规范化路径名,那么与操作系统无关的方法是使用上面所说的 strip,但要剥离的字符是 os.sep - 这是 Windows 的反斜杠,正斜杠对于 Unix。
【解决方案2】:

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

例如:

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

打印:

\abc

但这有一个小问题(基于您的问题的措辞):这将删除所有尾随反斜杠。如果你真的只想去掉最后一个字符,你可以这样做:

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

【讨论】:

    【解决方案3】:

    如果您只想在多个情况下删除一个反斜杠,请执行以下操作:

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

    【讨论】:

      【解决方案4】:
      if s.endswith('\\'):
          s = s[:-1]
      

      【讨论】:

      • 你试过了吗?这是一个语法错误。你需要使用if s.endswith('\\')
      • 说真的,我每次都会遇到这种情况。如果它们不能按预期工作,那么原始字符串到底有什么意义。
      【解决方案5】:

      不过,rstrip 函数将删除的不仅仅是最后一个字符。它将删除字符串末尾的所有反斜杠。这是一个简单的 if 语句,它将只删除最后一个字符:

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

      【讨论】:

        【解决方案6】:

        或者不那么漂亮(不要打败我)但也有效:

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

        是的 - rstrip 更好。只是想试试。

        【讨论】:

          【解决方案7】:

          我们可以使用内置函数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
          

          【讨论】:

            【解决方案8】:

            对于最终来到这里的 C# 人员:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-10-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-11
              相关资源
              最近更新 更多