Reputation: 51
I want to keep only the last term of a string separated by dots
Example:
My string is:
abc"val1.val2.val3.val4"zzz
Expected string after i use regex:
abc"val4"zzz
Which means i want the content from left-hand side which was separated with dot (.)
The most relevant I tried was
val json="""abc"val1.val2.val3.val4"zzz"""
val sortie="""(([A-Za-z0-9]*)\.([A-Za-z0-9]*){2,10})\.([A-Za-z0-9]*)""".r.replaceAllIn(json, a=> a.group(3))
the result was:
abc".val4"zzz
Can you tell me if you have different solution for regex please?
Thanks
Upvotes: 1
Views: 52
Reputation: 626747
You may use
val s = """abc"val1.val2.val3.val4"zzz"""
val res = "(\\w+\")[^\"]*\\.([^\"]*\")".r replaceAllIn (s, "$1$2")
println(res)
// => abc"val4"zzz
See the Scala demo
Pattern details:
(\\w+\")
- Group 1 capturing 1+ word chars and a "
[^\"]*
- 0+ chars other than "
\\.
- a dot([^\"]*\")
- Group 2 capturing 0+ chars other than "
and then a "
.The $1
is the backreference to the first group and $2
inserts the text inside Group 2.
Upvotes: 1
Reputation: 37832
Maybe without Regex at all:
scala> json.split("\"").map(_.split("\\.").last).mkString("\"")
res4: String = abc"val4"zzz
This assumes you want each "token" (separated by "
) to become the last dot-separated inner token.
Upvotes: 0