这可能已经回答了几十次,虽然找不到答案......
无论如何,在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的编辑)。
答案 0 :(得分:2)
看来你正试图匹配太多的元素。如果日期是您唯一感兴趣的,那么为什么不选择以下内容:
(\d{,2}/\d{,2}/)(\d{2,4})
请注意,理论上它也会匹配3位数年份。我假设你在实践中不会有这样的意见。