我想从字符串中提取一个单词,然后在我的正则表达式中使用该单词。
我的字符串如下所示:
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))
请建议一种推导整个表达的方法。
答案 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(",")