搜索文件内容以获得与正则表达式的匹配

时间:2011-09-14 21:56:22

标签: c# .net regex

我有一个与日期格式匹配的正则表达式:26 August 2011 我正在尝试读取文件中的每一行并捕获包含上述格式的日期的行。但它似乎没有起作用:

Regex test = new Regex(@"^((31(?!\ (Feb(ruary)?|Apr(il)?|June?|(Sep(?=\b|t)t?|Nov)(ember)?)))|((30|29)(?!\ Feb(ruary)?))|(29(?=\ Feb(ruary)?\ (((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])\ (Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\b|t)t?|Nov|Dec)(ember)?)\ ((1[6-9]|[2-9]\d)\d{2})$");
StreamReader file = new StreamReader(outputFile);

while ((line2 = file.ReadLine()) != null)
{
    lines.Add(line2);
    foreach (Match match in test.Matches(line2))
    {
        v += match.Value;
    }
}

好的,这就是场景..
1st - 如果行包含:“2011年8月26日”,则返回该日期 第2行 - 如果行包含:“某些文本等2011年8月26日”,则返回null。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

正则表达式中的前导^字符表示“匹配从行首开始。”最后一个字符是$,这意味着该行必须以表达式结束。因此,如果您的行包含除您指定格式的日期以外的任何内容,则正则表达式将不匹配。

删除前面的^和结尾的$

答案 1 :(得分:0)

我猜测试被定义​​为Regex test=new Regex("26 August 2011");

试试这个

StreamReader file = new StreamReader(outputFile); 

while ((line2 = file.ReadLine()) != null) 
{ 
    lines.Add(line2); 
    if (test.IsMatch(line2)) 
    { 
        v += line2;
    } 
} 

虽然您可能希望使用StringBuilder来提高性能(例如v = new StringBuilder()),然后使用v += line2代替v.Append(line2)

- UPDATE

使用提供的正则表达式阅读更新的答案,如果您只是使用现有代码并在正则表达式的开头删除^,最后删除$,那么您的代码将找到所有日期在文件中,无论位置如何,如果你正在追求的那样。