[英]scala - how to substitute env value for another variable using regex
我有一个引用环境变量的变量 aa。 我需要使用正则表达式替换值
Name = TEMP
Value = C:\Users\asus101\AppData\Local\Temp
aa: String = "${TEMP}_Report"
预期 output:
p2: C:\Users\asus101\AppData\Local\Temp_Report
我试过的代码
import scala.collection.JavaConversions._
val aa = "${TEMP}\\Report"
for ((name,value) <- System.getenv() ) {
val p1 = """\${XX}""".replace("XX",name).r
val p2 = p1.replaceAllIn(aa,value)
if(name=="TEMP") {
println("Name = " + name)
println("Value = " + value)
println("p2 = " + p2 )
}
我得到的错误是
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1
\${USERDOMAIN_ROAMINGPROFILE}
^
正则表达式有什么问题
这有点难说,但我认为这就是你所追求的。
import scala.util.Properties._
val pttrn = raw".*(\$$\{\s*(\w+)\s*\})".r
val strA = "${ME}:my ${HOME} is Gnome and my ${BROWSER} is fine."
val strB =
strA.split("(?<=})").map {
case s @ pttrn(a,b) => envOrNone(b).fold(s)(s.replace(a,_))
case s => s
}.mkString
//strB: String = ${ME}:my /home/jwvh is Gnome and my firefox is fine.
我的环境中没有$ME
,所以没有替换,但是$HOME
和$BROWSER
值被拉出并替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.