我有一个包含(非Scala)转义序列的输入字符串,例如\n
,\s
,\x20ac;
和\{$var}
。我想通过将普通字符复制到输出,并对每个转义序列应用一些处理来创建输出字符串,将处理结果复制到输出。处理转义序列和检测它的结束位置的规则仅取决于反斜杠后立即出现的字符。
在Scala中实现这一目标的惯用方法是什么?
答案 0 :(得分:5)
这个怎么样:
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 _)