对Scala来说有些新鲜,但它不是我的第一个编程牛仔竞技表演。我正在读取一个文件,Regex命令应用于数据库。我按如下方式动态构建正则表达式:
var valueRegex = new StringBuilder
var eRegex = z(3).toString() // comes from the third column in the file I am reading into the program.
valueRegex ++= "\"\"\" "
valueRegex ++= eRegex
valueRegex ++= " \"\"\""
valueRegex ++= ".r"
var allRegex = valueRegex
我已经尝试将valueRegex转换为字符串,char等。没有运气。我想发出如下命令:
println((allRegex findAllIn impression).mkString(",")) // impression field in DB.
正确打印allRegex,如果我将其剪切/粘贴到静态变量中 - 一切正常。
更多代码如下:
var eRegex = None: Option[String]
var valueRegex = new StringBuilder
var allRegex = None: Option[CharSequence]
for (a <- z) {
if ( z(3).isEmpty() ) {
var eRegex : String = (z(0))
valueRegex ++= "\"\"\""
valueRegex ++= eRegex
valueRegex ++= "\"\"\""
valueRegex ++= ".r"
// var allRegex = valueRegex
val allRegex = eRegex.r
println(allRegex)
// println(eRegex)
} else {
var eRegex = z(3).toString()
valueRegex ++= "\"\"\" "
valueRegex ++= eRegex
valueRegex ++= " \"\"\""
valueRegex ++= ".r"
// var allRegex = valueRegex
val allRegex = eRegex.r
println(allRegex)
}
println("Record ID: " + id + "\n")
***println((allRegex findAllIn impression).mkString(","))***
我仍然得到同样的错误:值FindAllIn不是Option [Sequence]
的成员当我创建一个变量foo =&#34;&#34;&#34;&#34;&#34;&#34; .r它在println语句中被评估为好。
好的,这里的解决方案如下:
val allRegex = eRegex.r.findAllIn(impression).mkString(",")
println(allRegex)
感谢reggert和cdshines的帮助和见解!
答案 0 :(得分:2)
Scala不是一种动态语言,但您似乎试图通过尝试将字符串作为Scala代码来对待它,只能通过在代码中实例化解释器来实现这一点(这样做太复杂了)你想做什么)。
这样做:
val allRegex = eRegex.r
这将为您提供Regex类的实例。请参阅此类的文档,以了解如何使用它来对要搜索的字符串进行模式匹配。
答案 1 :(得分:0)
目前尚不清楚你的问题究竟是什么,但我想这就像error: value findAll is not a member of String
。我是对的吗?
问题是,您正在将".r"
附加到正则表达式本身,而不是在.r
实例上调用String
。看:
scala> val vr = """\s.r"""
vr: String = \s.r
scala> vr findAllIn " "
<console>:9: error: value findAllIn is not a member of String
vr findAllIn " "
^
scala> val vr = """\s""".r
vr: scala.util.matching.Regex = \s
scala> vr findAllIn " "
res2: scala.util.matching.Regex.MatchIterator = non-empty iterator
我希望你能从这里推断出正确的解决方案。如果你想要更具体的东西,请分享一些具体的代码+错误摘要。