jean-luc T
jean-luc T

Reputation: 51

Relevant Regular Expression in scala

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

Answers (2)

Wiktor Stribiżew
Wiktor Stribiżew

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

Tzach Zohar
Tzach Zohar

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

Related Questions