我在Scala中有一个String列表,每个String都有一个键/值格式,如下所示:
<row Id="25780063" PostTypeId="2" ParentId="25774527" CreationDate="2014-09-11T05:56:29.900" />
每个String可能有一些额外的键/值。我想为每个字符串提取几个键的值。这是我定义的模式,但它无法正常工作
val idPattern = "Id=(.*).r
val typePattern = "PostTypeId=(.*)".r
如何正确提取&#39; Id&#39;的值?和&#39; PostTypeId&#39;?
答案 0 :(得分:1)
让它无法取消说找到而不是匹配所有输入。
scala> val id = """Id="([^"]*)"""".r.unanchored
id: scala.util.matching.UnanchoredRegex = Id="([^"]*)"
scala> """stuff Id="something" more""" match { case id(x) => x }
res7: String = something
scala> id.findFirstIn("""stuff Id="something" more""")
res8: Option[String] = Some(Id="something")
答案 1 :(得分:0)
首先,您必须将正则表达式定义为有效的稳定标识符。
val IdPattern = "Id=(.*).r
val TypePattern = "PostTypeId=(.*)".r
注意模式匹配所需的初始大写(或者如果真的希望它是小写的,则使用反引号)。
然后,
aString match {
case IdPattern(group) => println(s"id=$group")
case TypePattern(group) => println(s"type=$group")
}