scala中的相关正则表达式

时间:2016-12-21 13:52:11

标签: regex scala replace

我想只保留以点分隔的字符串的最后一个字词

示例:

我的字符串是:

  

ABC" val1.val2.val3.val4" ZZZ

使用正则表达式后的预期字符串:

  

ABC" VAL4" ZZZ

这意味着我希望左侧的内容用点分隔(

我尝试的最相关的是

    doc.Load(filepath)

结果是:

  

ABC" .val4" ZZZ

你能告诉我你的正则表达式有不同的解决方案吗?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用

val s = """abc"val1.val2.val3.val4"zzz"""
val res = "(\\w+\")[^\"]*\\.([^\"]*\")".r replaceAllIn (s, "$1$2")
println(res)
// => abc"val4"zzz

请参阅Scala demo

模式详情

  • (\\w+\") - 第1组捕获1个字字符和"
  • [^\"]* - 除"
  • 以外的0个字符
  • \\. - 一个点
  • ([^\"]*\") - 第2组捕获除"以外的0 +字符,然后捕获"

$1是第一组的反向引用,$2在第2组中插入文本。

答案 1 :(得分:0)

可能没有Regex:

scala> json.split("\"").map(_.split("\\.").last).mkString("\"")
res4: String = abc"val4"zzz

这假设你想要每个"令牌" (由"分隔)成为最后一个以点分隔的内部令牌。