从正则表达式匹配中获取案例类的对象

时间:2015-05-22 19:09:39

标签: regex scala

我正在使用scala regex-es从网页上删除数据,但我遇到了将结果解析为某些案例类的对象的问题。

在下面的代码片段中,我设法删除了所有数据,但我不知道如何解析迭代器中的3个元素。我想到了类似的东西:

val a :: b :: c :: _ = result.group(0).iDontKnowWha

任何想法我能做什么?

import model.FuneralSchedule
import play.api.libs.json.Json
import scala.io.Source

var date = "2015-05-05"
val source = Source.fromURL("http://zck.krakow.pl/?pageId=16&date=" + date).mkString
val regex = "(?s)<table>.+?(Cmentarz.+?)<.+?</table>".r
var thing: List[FuneralSchedule] = List()
var jsonFeed: List[Funeral] = List()
val regMatcher = "("

case class Funeral(hour: String, who: String, age: String) {
  override def toString: String = {
    "Cos"
  }
}

//implicit val format = Json.format[Funeral]
val out = regex.findAllIn(source).matchData foreach { table =>
  thing ::= FuneralSchedule(table.group(1), clearStrings(table.group(0)))
  """<tr\s?>.+?</\s?tr>""".r.findAllIn(clearStrings(table.group(0))).matchData foreach { tr =>
    //TODO: Naprawic bo szlak trafia wydajnosc
    val temp = """<td\s?>.+?</\s?td>""".r.findAllIn(tr.group(0)).matchData.foreach {
      elem => println(elem)
    }
    //println(Json.toJson(thingy))
  }
  println("Koniec tabeli")
}
thing
//Json.toJson(jsonFeed)
println(removeMarkers("<td > <td> Marian Debil </ td>"))
def removeMarkers(s: String) = {
  s.replaceAll( """(</?\s?td\s?>)""", "")
}
def clearStrings(s: String) = {
  val regex = "((class=\".+?\")|(id=\".+?\")|(style=\".+?\")|(\\n))"
  s.replaceAll(regex, "")
}

1 个答案:

答案 0 :(得分:2)

这样做的一种方法是将其转换为Stream并使用流的运算符进行匹配,如下所示:

val a #:: b #:: c #:: _ = """([a-z]){1}""".r.findAllIn("a b c").toStream

然后abc正是您要找的