正则表达式结果到全局映射 (scala)



我有一个简单的问题:

我想要一个值映射,它是解析文本的结果:

example.txt
Anna
James
Katy

因此,它应该是大地图 - 如下所示:

user_1 : Anna
user_2 : James
user_3 : Katy

我想使用 case 类将其与解析逻辑分开保存:

case class UserMap(userMap: Map[String, String])

所以,我开始解析它,我需要一些熟悉的东西:

(pseudo-scala)
  def parseTxt: Parser[UserMap] = ".*".r ^^ {
    case res => User(("user_1" -> res))
  }

这里最好的方法是什么?在这种情况下如何使用地图?谢谢

如果你想使用Scala解析器组合器,那么这里有一个解决方案:

import scala.util.parsing.combinator.RegexParsers
object SO29918479 extends App {
  case class UserMap(userMap: Map[String, String])
  object UserParser extends RegexParsers {
    def user: Parser[String] = """[a-zA-Z]+""".r
    def users: Parser[List[String]] = (user ~ "n".?).* ^^ ( _.map(_._1))
    def userMap: Parser[UserMap] = users ^^ { a =>
      UserMap(a.zipWithIndex.map({case (user, index) => s"user_$index" -> user}).toMap)
    }
  }
  println(UserParser.parse(UserParser.userMap, "AnnanJamesnKaty"))
}

最新更新