0

我要运行表达式的字符串将属于以下两种类型:

2012-11 即 yyyy-mm

11-2012 即 mm-yyyy

我想写一个正则表达式来构造格式的字符串:

(正则表达式组1)-(正则表达式组2)

这样 group1 始终是 yyyy 部分,而 group2 是 mm。

我想编写此函数以将日期格式标准化为单个 yyyy-mm 类型。

可以使用正则表达式来解决这个问题吗?

4

2 回答 2

3

如果你可以使用前瞻,你也许可以使用这样的东西:

(?=.*(\b\d{4}\b))(?=.*(\b\d{2}\b)).*

并替换为:

\1-\2

(或$1-$2

这里

于 2013-06-18T11:22:17.073 回答
1

匹配: \b(?:(\d{4})-(\d{2})|(\d{2})-(\d{4}))\b

代替:$1$4-$2$3

如果一个组不参与匹配,则替换字符串中对该组的任何引用都将被视为空字符串。因此,与组#4 连接的组#1 将始终是年份,与组#3 连接的组#2 将始终是月份。

这假设您正在使用您的语言的正则表达式替换机制,如 PHPpreg_replace()或 Java 的replaceAll(). 如果您使用(例如)Java 的group(n)方法,则未参与的组将作为空值返回,null当您将它们分配给字符串变量时,它们会转换为单词。所以一个像

String year = m.group(1) + m.group(4);

...将导致2011nullor null2011。大多数语言都比这更聪明,但这是你应该注意的事情。

于 2013-06-18T11:56:13.487 回答