скала соответствующие группы regex и заменить

val REGEX_OPEN_CURLY_BRACE = """{""".r
val REGEX_CLOSED_CURLY_BRACE = """}""".r
val REGEX_INLINE_DOUBLE_QUOTES = """\"""".r
val REGEX_NEW_LINE = """\n""".r

// Replacing { with '{' and } with '}'
str = REGEX_OPEN_CURLY_BRACE.replaceAllIn(str, """'{'""")
str = REGEX_CLOSED_CURLY_BRACE.replaceAllIn(str, """'}'""")
// Escape " with '"' and n with 'n'
str = REGEX_INLINE_DOUBLE_QUOTES.replaceAllIn(str, """'"'""")
str = REGEX_NEW_LINE.replaceAllIn(str, """'n'""")

есть ли более простой способ сгруппировать и заменить все эти {,},",n?

3 ответов


вы можете использовать скобки для создания группы захвата и для ссылки на эту группу захвата в заменяющей строке:

"""hello { \" world \" } \n""".replaceAll("""([{}]|\["n])""", "''")
// => java.lang.String = hello '{' '\"' world '\"' '}' '\n'

Вы можете использовать regex группы вот так:

scala> """([abc])""".r.replaceAllIn("a b c d e", """''""")
res12: String = 'a' 'b' 'c' d e

скобки в регулярном выражении позволяют сопоставить один из символов между ними. заменяется тем, что находится между скобками в регулярных выражениях.


считайте, что это ваша строка:

var actualString = "Hi {  {  { string in curly brace }  }   } now quoted string :  \" this \" now next line \\n second line text"

устранение :

var replacedString = Seq("\{" -> "'{'", "\}" -> "'}'", "\"" -> "'\"'", "\\n" -> "'\\n'").foldLeft(actualString) { _.replaceAll _ tupled (_) }

scala> var actualString = "Hi {  {  { string in curly brace }  }   } now quoted string :  \" this \" now next line \\n second line text"
actualString: String =
Hi {  {  { string in curly brace }  }   } now quoted string :  " this " now next line \
 second line text

scala>      var replacedString = Seq("\{" -> "'{'", "\}" -> "'}'", "\"" -> "'\"'", "\\n" -> "'\\n'").foldLeft(actualString) { _.replaceAll _ tupled (_) }
replacedString: String =
Hi '{'  '{'  '{' string in curly brace '}'  '}'   '}' now quoted string :  '"' this '"' now next line \'
' second line text

надеюсь, это поможет:)