我正在尝试从 Scala 中以下页面的页面源中提取日期 2013 年 9 月 11 日:
我正在使用的正则表达式是:
val dateregex = "</span>//s+[a-zA-Z0-9,:;& \t]+//s+</div>".r
然后将其用作:
val dates = dateregex findAllIn content2
其中 content2 是页面源内容
我没有输出。任何人都可以建议如何修改我的正则表达式吗?
我正在尝试从 Scala 中以下页面的页面源中提取日期 2013 年 9 月 11 日:
我正在使用的正则表达式是:
val dateregex = "</span>//s+[a-zA-Z0-9,:;& \t]+//s+</div>".r
然后将其用作:
val dates = dateregex findAllIn content2
其中 content2 是页面源内容
我没有输出。任何人都可以建议如何修改我的正则表达式吗?
你交换了 scape 字符。您的表达效果很好,只需使用\\s+
:
scala> val dateregex = "</span>\\s+[a-zA-Z0-9,:;& \t]+\\s+</div>".r
dateregex: scala.util.matching.Regex = </span>\s+[a-zA-Z0-9,:;& ]+\s+</div>
scala> val d = dateregex findAllIn source
d: scala.util.matching.Regex.MatchIterator = non-empty iterator
scala> d.toSet
res9: scala.collection.immutable.Set[String] =
Set(</span>
September 11, 2013:
</div>)
但是,如果您只想获得日期,那就有点太“贪婪”了。
此外,如果您将其应用于整个页面,请考虑匹配 div class="article-dateline",或者更好地查询它,然后应用您的正则表达式。
我会改用这个正则表达式:
编辑:将示例更改为使用@pagoda_5b 建议的三引号,以避免双引号
val dateregex = new scala.util.matching.Regex("""</span>\s+([a-zA-Z]+)\s+([0-9]+),\s+([0-9]+)""","month","day","year")
val d = dateregex findFirstIn source match {
case Some(dateregex(month,day,year)) => println(s" Month= $month, Day=$day, Year=$year")
case None => println("No Match")
}
result> Month= September, Day=11, Year=2013