用正则表达式搜索文件内容查找匹配项

本文关键字:查找 正则表达式 搜索 文件 | 更新日期: 2023-09-27 18:08:41

我有一个匹配日期格式的正则表达式,如: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;
    }
}

好的,这是一个场景…
1 -如果行包含:"26 August 2011",则返回该日期。
如果行包含:" some text etc 26 August 2011",它返回null。

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

用正则表达式搜索文件内容查找匹配项

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

去掉前面的^和后面的$

我猜测试被定义为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)

——更新

阅读您的更新答案与提供的正则表达式,如果你只是使用你现有的代码,并删除^在正则表达式的开始和$在结束,然后你的代码将找到文件中的所有日期,无论位置,如果这是你之后。