Scala正则表达式替换不适用于多种模式和大写换行符

时间:2018-10-29 15:38:42

标签: regex scala

我有一个字符串,并替换如下所示的正则表达式模式:

//1 - var x = "ffw\nw\naa\\N".replaceAll("[^\\u0020-\\u00FF\\u0001\\t\\n]", "")
//2 - var x = "ffw\nw\naa\\N".replaceAll("[\\n]", "")
print(x)

1)尽管这是我要使用的模式,但不清洗任何东西。

2)仅清除小写换行符。如果我尝试执行var x = "ffw\nw\naa\\N".replaceAll("[\\N]", "")来清理大写的N行,则出现此错误 java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 2

[\N]
  ^
at java.util.regex.Pattern.error(Pattern.java:1957)
at java.util.regex.Pattern.escape(Pattern.java:2473)
at java.util.regex.Pattern.range(Pattern.java:2635)
at java.util.regex.Pattern.clazz(Pattern.java:2564)
at java.util.regex.Pattern.sequence(Pattern.java:2065)
at java.util.regex.Pattern.expr(Pattern.java:1998)
at java.util.regex.Pattern.compile(Pattern.java:1698)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.replaceAll(String.java:2223)

[^\\u0020-\\u00FF\\u0001\\t\\n]这是我要使用的正则表达式模式,但是它不起作用,也不能清除N条新行。

2 个答案:

答案 0 :(得分:1)

使用

val s = "ffw\nw\naa\\N"
val rx = "\\\\N|[^\\u0020-\\u00FF\\u0001\\t]"
println(s.replaceAll(rx, ""))
// => ffwwaa

请参见online Scala demo

详细信息

  • [^\\u0020-\\u00FF\\u0001\\t]-一个与所有字符匹配的否定字符类,但匹配\u0020-\u00FF范围,\u0001和制表符中的字符
  • |-或
  • \\\\N-反斜杠+ N字符组合。

请参见regex demo

答案 1 :(得分:0)

您为什么要使用Regex做到这一点?

这有效(至少在您的示例中如此:

val y = "ffw\nw\naa\\N".replace("\\N", "\\n")