使用正则表达式匹配字符串中任何日期的任何部分

时间:2010-07-29 17:30:42

标签: regex datetime

这可能已经回答了几十次,虽然找不到答案......

无论如何,在Smalltalk环境中工作我有一个由三部分组成的字符串:"ttm 4/6/97 00:08"。字符串是非常变量,意味着某些部分可能缺失(因此它将是由少于三个部分组成的字符串,如"ttm 4/6/97"),顺序可能不同({{1} })。此外,日期可能缺少数字("00:08 ttm 4/6/97""04/6/1997"等)。幸运的是,作为分隔符的空格是常数加,没有前导或尾随空格。

我需要的是在字符串中找到日期并匹配两个部分:"4/06/97"。到目前为止,我已经取得了一定的成功,只有这样的事情:

(4/6/)(97)

有人可以指出我正确的方向吗?

编辑: 为了使问题更简单,我尝试使用以下表达式获得整个日期的匹配:^\S*\s?(\d\d?/\d\d?/)(\d\d\d?\d?)\s?\S* (匹配器期望表达式匹配整个字符串)。应用于字符串^.*(\d\d?/\d\d?/\d\d\d?\d?).*,返回的匹配是"10/4/97 00:08 di"(也许匹配器不是有史以来最好的......)。是否可以修改正则表达式字符串以确保匹配器返回所有日期? (感谢SilentGhost的编辑)。

1 个答案:

答案 0 :(得分:2)

看来你正试图匹配太多的元素。如果日期是您唯一感兴趣的,那么为什么不选择以下内容:

(\d{,2}/\d{,2}/)(\d{2,4})

请注意,理论上它也会匹配3位数年份。我假设你在实践中不会有这样的意见。