Sta*_*lav 3 regex scala replaceall
这段代码:
\n\n"""{"nAMe": "Deloise", "WINS": [["three of a kind", "5\xe2\x99\xa3"]]}""".replaceAll("""(\\"[^"]+\\" *:)""", "|UPERCASETEST|$1|".toLowerCase())\nRun Code Online (Sandbox Code Playgroud)\n\n生产:
\n\nString = {|upercasetest|"nAMe":| "Deloise", |upercasetest|"WINS":| [["three of a kind", "5\xe2\x99\xa3"]]}\nRun Code Online (Sandbox Code Playgroud)\n\n当我期待的时候:
\n\nString = {|upercasetest|"name":| "Deloise", |upercasetest|"wins":| [["three of a kind", "5\xe2\x99\xa3"]]}\nRun Code Online (Sandbox Code Playgroud)\n\n知道为什么捕获组不希望小写以及如何解决它吗?
\n您需要将匹配对象传递给replaceAllIn您可以在其中操作内容的 lambda 表达式,否则,在 内部replaceAll,$1不会“扩展”为实际的第 1 组子匹配值:
val s = """{"nAMe": "Deloise", "WINS": [["three of a kind", "5\xe2\x99\xa3"]]}"""\nval rx = """(\\"[^"]+\\" *:)""".r\nval replacedStr = rx replaceAllIn (s, m => s"|UPERCASETEST|${m.group(1)}|".toLowerCase())\nprintln(replacedStr)\nRun Code Online (Sandbox Code Playgroud)\n\n查看Scala 演示
\n\n输出:
\n\n{|upercasetest|"name":| "Deloise", |upercasetest|"wins":| [["three of a kind", "5\xe2\x99\xa3"]]}\nRun Code Online (Sandbox Code Playgroud)\n