代码之家  ›  专栏  ›  技术社区  ›  sujit

如何删除Scala中字符串的所有尾随反斜杠?

  •  2
  • sujit  · 技术社区  · 7 年前

    我想去掉所有后面的反斜杠( '\' )从一根绳子上。

    例如:

    "ab"       -> "ab" 
    "ab\\\\"   -> "ab"
    "\\\\ab\\" -> "\\\\ab"
    "\\"       -> ""
    

    我可以使用下面的代码完成这项工作,但无法处理字符串只有斜杠的情况。请让我知道,如果这可以通过一个不同的regex实现。

    val str = """\\\\q\\"""
    val regex = """^(.*[^\\])(\\+)$""".r
    str match  {
      case regex(rest, slashes) => str.stripSuffix(slashes)
      case _ => str
    }
    
    5 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    将我的评论转换为答案。这应该可以消除所有后面的反斜杠:

    str = str.replaceFirst("\\\\+$", "");
    

    \\\\+ 匹配1+反斜杠(单个反斜杠输入为 \\\\ 在Java/Scala中)。

        2
  •  1
  •   C4stor    7 年前

    虽然不是正则表达式,但我建议一个更简单的解决方案: str.reverse.dropWhile(_ == '\\').reverse

        3
  •  1
  •   Xavier Guihot    7 年前

    不使用regex,但可以使用 String.lastIndexWhere(p: (Char) ⇒ Boolean) 获取最后一个字符的位置 '\' 为了子串直到这个字符:

    str.substring(0, str.lastIndexWhere(_ != '\\') + 1)
    
        4
  •  1
  •   jwvh    7 年前

    如果出于某种原因,您承诺使用regex解决方案,那么就可以做到这一点。

    val regex = """[^\\]?(\\*)$""".r.unanchored
    str match  {
      case regex(slashes) => str.stripSuffix(slashes)
    }
    
        5
  •  0
  •   Manoj Kumar Dhakad    7 年前

    你也可以这样做 slice 功能

    str.slice(0,str.lastIndexWhere(_ != '\\')+1)
    
    推荐文章