在Scala中使用正则表达式解析ddMMMyy日期字符串

时间:2013-10-25 05:51:23

标签: regex scala

我想制作一个正则表达式,以便可以匹配以下日期并将其元素传递给另一个函数:

"21Feb14"

现在问题是前两位数。用户可以写一个日期,其中'day'字段是一位数长或两位数长:

"21feb14" and "1jan13"

两者都是有效的输入。 我制作的正则表达式如下:

val reg = """(\\d)([a-zA-Z][a-zA-Z][a-zA-Z])(\d\d)""".r

显然没有考虑到第一个数字可能存在也可能不存在。我该如何处理?

2 个答案:

答案 0 :(得分:4)

?标记处理。像这样,

(\d?\d)([a-zA-Z][a-zA-Z][a-zA-Z])(\d\d)

但我建议您使用以下正则表达式

(\d?\d)([a-zA-Z]{3})(\d\d)

或使用posix

(\d?\d)([\p{Alpha}]{3})(\d\d)

答案 1 :(得分:2)

这个更具可读性和可维护性

val reg = """(\d{1,2})([a-zA-Z]{3})(\d{2})""".r

此处的解释:http://regex101.com/r/uZ9qI5