我的问题如下:
我有一个包含日期和其他数据的字符串数组。我的日期将采用以下几种格式之一:
有没有办法在字符串中搜索符合该字符串的数字?
另外,如果我可以检查dd是否介于1和31之间等,那将会很好,但如果我之后不得不这样做,那就不会那么糟糕了。
答案 0 :(得分:8)
每个都对应一个正则表达式。
以下是每个的正则表达式:
\b(?:[012][1-9]|3[01])/(?:0[1-9]|1[012])/\d{4}\b
\b(?:[012][1-9]|3[01])/(?:0[1-9]|1[012])/\d{2}\b
\b(?:0[1-9]|1[012])/\d\d\b
\b[1-9]/[1-9]/\d\d\b
\b\d{4}\b
\b\d\d\b
当然,您可以通过不同方式将它们组合在一起。你甚至可以制作一个超级正则表达式。
但最后一个相当有趣。我可以想象一下你的文本中可能有一个普通的旧数字,例如42
可能实际上并不对应一年。我猜你仍然可以对其进行后处理。
快乐的复兴。
<强>附录强>
回答评论中的一些问题:
是的,它适用于字符串的开头和结尾,因为\b
是字边界,其中包含来自字符(字母,数字和字母)的所有过渡(下划线)到非单词字符,反之亦然,包括字符串的开头和结尾。
要查看测试,请参阅此处:http://jsfiddle.net/wRufK/。是的我知道这是用JavaScript而不是C#,但是jsfiddle是一种非常方便的方式来显示代码。但是有一些区别 - 在C#中我们使用Regex.match
并且JavaScript正则表达式有额外的反斜杠来逃避内部正斜杠。
indexOf
可能过度杀伤,具体取决于应用程序。如果要查找所有匹配项,请参阅http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx以获取有关重复匹配的信息。您还可以修改正则表达式以进行捕获。
由于您的日期可以是上述任何一种形式,也可能是其他形式,因此单个正则表达式可能更为可取。这里有一个非常灵活的日期查找器:http://www.regular-expressions.info/dates.html。您可能需要考虑它而不是修复精确集。