如何使用scala中的regex从字符串中获取特定数据

时间:2015-03-17 13:01:41

标签: java regex scala

我有一个由日期组成的字符串,我想只选择一个特定的字段。如何在scala中提取。

我的示例字符串是:

  

8月4日星期一:发货

我想要字符串

  

8月4日

如何执行此操作是在scala中

1 个答案:

答案 0 :(得分:1)

这是使用原始正则表达式的一种方式:

val str = "Monday, 4th Aug : shipping"
val regex = "^Monday, (\\d+)[a-z]{2} ([A-z]{3}) : [A-z]+$".r

scala> Option(str) collect { case regex(day, month) => s"$day $month" }
res130: Option[String] = Some(4 Aug)

我使用了Optioncollect,因此如果没有匹配,我可以返回None。我使用regex(day, month)模式匹配正则表达式中的捕获组,然后使用它们来创建新字符串。要处理仅匹配星期/实际月份的天数,您可能希望使用OR或其他东西改进该正则表达式。或者,如果你真的不在乎,你可以改变周一"匹配一些字符串。

例如

val regex = "^(Monday|Tuesday), (\\d+)[a-z]{2} ([A-z]{3}) : [A-z]+$".r

scala> Option(str) collect { case regex(_, day, month) => s"$day $month" }
res132: Option[String] = Some(4 Aug)