我知道raw String可以声明为:
val foo: String = """foo"""
或
val foo: String = raw"foo"
但是,如果我有一个字符串类型val,我该如何将其转换为raw?例如:
// val toBeMatched = "line1: foobarfoo\nline2: lol"
def regexFoo(toBeMatched: String) = {
val pattern = "^.*foo[\\w+]foo.*$".r
val pattern(res) = toBeMatched /* <-- this line induces an exception
since Scala translates '\n' in string 'toBeMatched'. I want to convert
toBeMatched to raw string before pattern matching */
}
答案 0 :(得分:1)
在您的简单案例中,您可以这样做:
val a = "this\nthat"
a.replace("\n", "\\n") // this\nthat
对于更通用的解决方案,请在Apache commons中使用StringEscapeUtils.escapeJava。
import org.apache.commons.lang3.StringEscapeUtils
StringEscapeUtils.escapeJava("this\nthat") // this\nthat
注意:您的代码实际上没有任何意义。除了String toBeMatched
是无效的Scala语法之外,您的正则表达式模式已设置为仅匹配字符串"foo"
,而不是"foo\n"
或"foo\\n"
,以及{ {1}}只有在你的正则表达式尝试捕获某些东西时才有意义,而不是。
也许(?!)你的意思是这样的?:
pattern(res)