Scala中的正则表达式

时间:2017-07-06 17:28:17

标签: regex scala

我想从字符串中提取一个单词,然后在我的正则表达式中使用该单词。

我的字符串如下所示:

 val s = "null_eci_count"

我想从上面的字符串派生以下字符串:

sum(cast((eci is null or eci in ('', '0', 'null', 'NULL')) as int)) 

我使用了replaceAll并导出了上述表达式的一部分:

scala> s.replaceAll("null_", "sum(cast((").replaceAll("_count"," is null) as int))")
res69: String = sum(cast((eci is null) as int))

请建议一种推导整个表达的方法。

3 个答案:

答案 0 :(得分:0)

怎么样:

val eci = s.split("_").drop(1).head
val result = s match {s"sum(cast(($eci is null or $eci in ('', '0', 'null', 'NULL')) as int))"

答案 1 :(得分:0)

选择字符串的中间部分作为一个组(即eci).*?_(.*?)_.*,然后使用组引用eci返回\1

答案 2 :(得分:-1)

我使用ArrayBuffer来做到这一点:

import scala.collection.mutable.ArrayBuffer
val tgt=spark.sql("select * from ctx_monitor.xpo_click_counts")
val a = tgt.columns.slice(4,tgt.columns.length)
for (e <- a) {
if (e contains "null"){ val c=e.replaceFirst("null_",""); 
col += "sum(cast((" + c + " is null or " + c + " in('','0','null','NULL')) as int))"}}

val cols=col.mkString(",")