soa*_*dos 3 c# string pattern-matching
我的问题如下:
我有一个包含日期和其他数据的字符串数组.我的日期将采用以下几种格式之一:
有没有办法在字符串中搜索符合该字符串的数字?
另外,如果我可以检查dd是否介于1和31之间等等,那将是很好的,但如果我之后必须这样做,那就不会那么糟糕了.
每个都对应一个正则表达式.
以下是每个的正则表达式:
\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.您可能需要考虑它而不是修复精确集.