scala regex replace不使用多种模式,用于大写换行符
我有一个字符串和替换正则表达式模式,如下所示:scala regex replace不使用多种模式,用于大写换行符,regex,scala,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
//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]”,“”)
以清除新行中的大写字母,则会出现此错误
java.util.regex.PatternSyntaxException:索引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)
[\N]
^
位于java.util.regex.Pattern.error(Pattern.java:1957)
位于java.util.regex.Pattern.escape(Pattern.java:2473)
位于java.util.regex.Pattern.range(Pattern.java:2635)
位于java.util.regex.Pattern.clazz(Pattern.java:2564)
位于java.util.regex.Pattern.sequence(Pattern.java:2065)
位于java.util.regex.Pattern.expr(Pattern.java:1998)
位于java.util.regex.Pattern.compile(Pattern.java:1698)
Pattern.(Pattern.java:1351)
位于java.util.regex.Pattern.compile(Pattern.java:1028)
位于java.lang.String.replaceAll(String.java:2223)
[^\\u0020-\\u00FF\\u0001\\t\\n]
这是我想要使用的正则表达式模式,但是它不起作用,也不会清除新行中的大写字母。为什么要对正则表达式执行此操作
这很有效(至少对于您的示例:
val y = "ffw\nw\naa\\N".replace("\\N", "\\n")
使用
看
详细信息
-一个求反字符类,它与任何字符匹配,但与[^\\u0020-\\u00FF\\u0001\\t]
范围、\u0020-\u00FF
和选项卡中的字符除外\u0001
-或|
-反斜杠+\\\\N
字符组合N
请参阅。我无法完成多个替换,我需要编辑
[^\\u0020-\\u00FF\\u0001\\t\\n]
要考虑大写N个新行字符,不知道为什么不能处理普通新行字符。我使用正则表达式是因为这是我正在处理的要求,我们正在处理一个可参数化的正则表达式字符串。确切的字符串在我们的旧工作流中工作,不明白为什么它不能与scala一起工作。你知道吗你想删除\
和N
的组合吗?比如“[^\u0020-\u00FF\u0001\t\N]\\N”“”
(等于“[^\\u0020-\\u00FF\\u0001\\t\\N]\\\\N”
)?“[^\u0020-\u00FF\u0001\t\N]\\N”“”
这可以正确地删除\n
和\n
字符,但是我更喜欢单双引号方法。但是“[^\\u0020-\\u00FF\\u0001\\t\\n]\\\\\n”
删除\n
字符,但不删除\n
字符。val x=“ffw\nw\nw\naa\\n.replaceAll([^\\u0020-\\u00FF\\u0001\\t\\n]\\\\\\\\\\\\n),”
然后打印(x)
没有\N
但是有\N
字符如果需要删除换行符,为什么要在求反字符类中使用\N
呢?使用“[^\\u0020-\\u00FF\\u0001\\t]\\\\\N”
。请参见产生ffwwaa
val s = "ffw\nw\naa\\N"
val rx = "\\\\N|[^\\u0020-\\u00FF\\u0001\\t]"
println(s.replaceAll(rx, ""))
// => ffwwaa