23
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ますか?

4

3 に答える 3

28

括弧を使用してキャプチャグループを作成$1し、置換文字列でそのキャプチャグループを参照できます。

"""hello { \" world \" } \n""".replaceAll("""([{}]|\\["n])""", "'$1'")
// => java.lang.String = hello '{' '\"' world '\"' '}' '\n'
于 2012-12-05T17:46:13.343 に答える
12

次のような正規表現グループを使用できます。

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

正規表現の角かっこを使用すると、それらの間の文字の1つを一致させることができます。$1正規表現の括弧の間にあるものに置き換えられます。

于 2012-12-05T17:43:36.193 に答える
0

これがあなたの文字列だと考えてください:

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

これがお役に立てば幸いです:)

于 2017-07-31T06:45:05.667 に答える