这是我用于以dd-MMM-yyyy格式捕获日期的正则表达式
(\b\d{1,2}-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-(19|20)\d{2}\b)
我已尝试对整个正则表达式进行分组,但它仅捕获第一次出现的正则表达式。
例如,在字符串" BETWEEN 04-May-2015和2015年5月5日"它只捕获2015年5月4日。
这是vb.net代码:
Dim rx as regex = new regex("\b\d{1,2}-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-(19|20)\d{2}\b",(RegexOptions.Compiled Or RegexOptions.IgnoreCase))
Dim m as match = rx.match(criteria)
if m.success then
Console.Writeline(m.Groups(0).Captures.Count)
end if
我哪里错了?任何帮助都会很棒。
答案 0 :(得分:3)
如果您希望多次匹配,则必须使用Regex.Matches
代替Regex.Match
。
给定输入字符串和模式,此代码
Dim s = "BETWEEN 04-May-2015 AND 05-May-2015"
Dim results = Regex.Matches(s, "\b\d{1,2}-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-(19|20)\d{2}\b", RegexOptions.IgnoreCase)
Console.WriteLine(results.Count())
打印2
,因此您的模式本身可以正常工作。
您可以将其更改为:
\b(\d{1,2})-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-((?:19|20)\d{2})\b
捕捉日,月和年(如果这是你想要的)。
答案 1 :(得分:2)
这不是你的正则表达式的问题,这是因为周围的代码处理正则表达式。您没有显示它,但需要使用Regex.Matches方法,该方法返回包含所有匹配项的MatchCollection。