正则表达式匹配不包含完整匹配文本

时间:2016-04-25 19:59:40

标签: c# regex

我遇到的正则表达式匹配问题不包含匹配内容的全文。它只包含月份名称的最后一个字母,以及日期和年份部分。我认为它将包含完整的月份名称,以及日期和年份部分,因为这是我的正则表达式包含的内容,但由于某种原因它不会。

以下是我复制问题的示例:https://ideone.com/wJPj1d

using System;
using System.Text;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        string text = "<strong>Date of Hire: </strong>November 2, 2015<br />";
        string foundMatch = "No match found";
        Regex dateFormat = new Regex("[January|February|March|April|May|June|July|August|September|October|November|December] [0-9]{1,2}, [0-9]{4}");
        MatchCollection matches = dateFormat.Matches(text);
        if(matches.Count > 0)
        {
            foundMatch = matches[0].ToString();
        }
        Console.WriteLine(foundMatch);
    }
}

我得到的输出是:r 2, 2015

我期望的是:November 2, 2015

1 个答案:

答案 0 :(得分:3)

使用group (...),而不是character class [...]

Regex dateFormat = new Regex("(January|February|March|April|May|June|July|August|September|October|November|December) [0-9]{1,2}, [0-9]{4}");
                              ^                                                                                     ^

请参阅this IDEONE demo

如果您不需要访问捕获的月份名称,请使用非捕获组(?:...)