【问题标题】:Idiomatic way to expand escape sequences in a string in Scala在 Scala 中扩展字符串中的转义序列的惯用方法
【发布时间】:2013-05-09 06:51:50
【问题描述】:

我有一个包含(非 Scala)转义序列的输入字符串,例如 \n\s\x20ac;\{$var}。我想通过将普通字符复制到输出来创建输出字符串,并对每个转义序列应用一些处理,将处理结果复制到输出。处理转义序列和检测它的结束位置的规则都只取决于反斜杠后立即出现的字符。

在 Scala 中实现此目的的惯用方式是什么?

【问题讨论】:

    标签: scala


    【解决方案1】:

    这个怎么样:

    val r = """\\[ns]|\\x[a-f0-9]{4};|\\\{\$[a-z][a-z_0-9]+\}""".r
    val result = r.replaceAllIn(targetString, m =>
      // your logic. `m` is a Match. Use it to decide what to replace with.
    )
    

    看看Regex

    你甚至可以更进一步,使用漂亮的模式匹配:

    import scala.util.matching.Regex.Match
    def handle(m: Match) = m match {
      case Match("""\n""") => // do stuff
      case _ => // etc.
    }
    
    val result = r.replaceAllIn(targetString, handle _)
    

    【讨论】:

    • 很好,我知道这一定很简单。
    • 我实际上一直在寻找“走得更远”的解决方案,但没有成功;但是因为我可以在 m.charAt(1) 上做一个简单的开关,所以实际上并不需要它。但是,我必须解决一个问题:替换字符串必须通过 Regex.quoteReplacement 放置,以防它包含任何“\”或“$”字符。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多