2017-07-06 12 views
0

文字列から単語を抽出し、その単語を正規表現で使用したいとします。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)) 

表現全体を派生させる方法を提案してください。

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))" 
+0

をロジックとは何ですか?私は何かをしようとしたが、私はその論理が何かを理解していない。 –

答えて

0

+0

私は現在このロジックを以下のステートメントに組み込む方法がわかりません:私は現在使っています:val tgt = spark.sql( "select * from ctx_monitor.xpo_click_counts"); ( "_ cnt"、 ")")。replaceAll( "_ _")。replaceAll( "distinct _"、 "count(distinct").replaceAll( "_ cnt"、 " ( "null_"、 "sum(cast(()")replaceAll( "_ count"、 "in(null、 '')))))") – Sudha

+0

私はそのステートメントが何をしているのか分かりません。おそらく、あなたはあなたの質問に違って... – Dima

0

基(すなわち、ECI).*?_(.*?)_.*として文字列の中央部分を選択し、グループ基準\1eciを返す約どのよう

0

私はこれを行うには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(",")