如何用scala中的literal \ d替换所有数字?

时间:2011-02-28 13:18:41

标签: regex scala

我想编写一个函数,用文字\d替换字符串中的所有数字。我的代码是:

val r = """\d""".r
val s = r.replaceAllIn("123abc", """\d""")
println(s)

我希望结果是\d\d\dabc,但得到:

dddabc

然后我将我的代码(第2行)更改为:

val s = r.replaceAllIn("123abc", """\\d""")

结果现在正确:\d\d\dabc

但是我不明白为什么方法replaceAllIn转换字符串,而不是直接使用它?


我之前的代码中有一个toList,现在正是我想要的。我刚刚更新了这个问题。谢谢大家。

2 个答案:

答案 0 :(得分:1)

只需删除toList

val r = """\d""".r
val list = r.replaceAllIn("123abc", """\\d""")
println(list)

String是(隐式地,通过WrappedString,可转换为)Seq[Char]。如果您调用toList,则会有List[Char]

答案 1 :(得分:1)

Scala的Regex下面使用java.util.regex(至少在JVM上)。现在,如果你在Java文档上查找replaceAll,你会看到:

  

请注意反斜杠(\)和美元   替换字符串中的符号($)   可能会导致结果不同   而不是被视为一个   字面替换字符串。美元   标志可以作为参考   捕获的子序列如上所述   上面,反斜杠用于   逃避文字中的字符   替换字符串。