Scala:正则表达式给出了“非法重复”错误

时间:2017-10-20 15:04:28

标签: regex string scala replace

我需要在解析文件时找到'} {“_ id”'。

该图案内可能有任意数量的空白区域或没有空白区域。我不想替换文件中的任何其他空格,除非匹配该模式。我想用'},{“_ id”'替换。

我在scala代码中尝试这个并且使用正则表达式它一直给我'非法重复'错误。

正在尝试使用的正则表达式查找字符串是

fileTxt.replaceAll("[\\s]+}[\\s]+{[\\s]+\"_id\"", "},{\"_id\"")

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:0)

Java正则表达式中使用{}个字符将子模式标记为具有重复值。所以,

"\\s{3,4}"

是一种模式,表示应该匹配三到四个连续的空格。

您应该更改正则表达式以转义“{”和“}”字符。

fileTxt.replaceAll("[\\s]+\\}[\\s]+\\{[\\s]+\"_id\"", "},{\"_id\"")

答案 1 :(得分:0)

错误消息是由于特殊的正则表达式字符{}未在匹配模式中转义。其他一些注意事项:1)使用*匹配0或更多(而不是+匹配1个或更多)空格,以及2)使用"""括起模式匹配表达式以避免像双反斜杠一样逃脱:

val s = """}  { "_id""""

s.replaceAll("""\s*\}\s*\{\s*"_id"""", """\},\{"_id"""")
// res1: String = },{"_id"