2017-04-27 27 views
2

此代碼:如何小寫捕獲組只有斯卡拉

"""{"nAMe": "Deloise", "WINS": [["three of a kind", "5♣"]]}""".replaceAll("""(\"[^"]+\" *:)""", "|UPERCASETEST|$1|".toLowerCase()) 

產地:

String = {|upercasetest|"nAMe":| "Deloise", |upercasetest|"WINS":| [["three of a kind", "5♣"]]} 

雖然我期待:

String = {|upercasetest|"name":| "Deloise", |upercasetest|"wins":| [["three of a kind", "5♣"]]} 

任何想法,爲什麼捕獲組不希望小寫和如何解決它?

回答

4

你需要匹配對象傳遞給內部replaceAllIn lambda表達式,你可以操縱的內容,否則,內部replaceAll,該$1沒有得到「擴大」到實際的第1組的子匹配值:

val s = """{"nAMe": "Deloise", "WINS": [["three of a kind", "5♣"]]}""" 
val rx = """(\"[^"]+\" *:)""".r 
val replacedStr = rx replaceAllIn (s, m => s"|UPERCASETEST|${m.group(1)}|".toLowerCase()) 
println(replacedStr) 

Scala demo

輸出:

{|upercasetest|"name":| "Deloise", |upercasetest|"wins":| [["three of a kind", "5♣"]]} 
+1

感謝你,因爲工作 – Stanislav