[英]Not sure why I can't match this regex in C#
我正在尝试将字符串“9月12日”与以下C#代码匹配。 但它不匹配,我不知道为什么。 我究竟做错了什么? 它似乎适用于regexpal.com
public static void Scan(String str)
{
String digits = "(0|1|2|3|4|5|6|7|8|9)";
String r1 = "September " + digits + "+";
foreach (Match match in Regex.Matches(str, r1, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
{
String value = match.Value;
}
}
问题是标志RegexOptions.IgnorePatternWhitespace。 删除它,因为你不想忽略正则表达式中的空格 - 你需要它来匹配“九月”和“19”之间的空格。
提示: digits
可以更容易写为[0-9]。 一个更好的正则表达式将是
September [0-9]+
正如@Moritz指出你不匹配因为你忽略了空白。 您还应该注意,您当前的方法将匹配无效的各种“日期”。 例如, September 67
。
我建议使用稍微复杂的模式来匹配数字模式:
September ([1-9]|[12][0-9]|3[01])
这将数字限制在1到31之间。虽然这仍然允许一些无效日期(例如September 31
),但它将极大地限制匹配的无效日期的数量。
@“九月\\ s \\ d +”应该这样做
\\ s匹配一个空格,\\ d匹配任何数字,+是前面的1或更多。
你可以这样试试。
public static void Scan(String str)
{
// This regex is pretty nasty, I would probably take more time to refine it.
String patt = @"^([A-Za-z]+)(\s)(\d+)$";
foreach (Match match in Regex.Matches(str, patt, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
{
String value = match.Value;
Console.WriteLine(value);
}
}
...
然后称之为:
Scan("September 2011");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.