使用正则表达式在文件中查找日期字符串

本文关键字:查找 日期 字符串 文件 正则表达式 | 更新日期: 2023-09-27 18:31:03

我需要在文本文件中查找特定的日期字符串。 文件中当前有两个日期字符串 - "截止日期:01/26/2016"和"日期:01/252016"。 我需要找到第二个,但我当前的代码只能找到第一个。 我猜正则表达式会是一个更好的实现,但不确定如何编码。

当前代码 -

searchString = "Date:";
if (fileContents.IndexOf(searchString) > 0)
{
    string tmp = fileContents.Substring(fileContents.IndexOf(searchString) + searchString.Length).Trim();
    string loan_date = tmp.Substring(0, tmp.IndexOf(''r')).Trim();
    if (loan_date.Count(x => x == '/') == 1)
    {
        StringBuilder sb = new StringBuilder(loan_date);
        sb[sb.Length - 4] = '/';
        loan_date = sb.ToString();
    }
    DateTime dt = DateTime.ParseExact(loan_date, "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);
    return dt;
}

使用正则表达式在文件中查找日期字符串

在 C# 中,可以通过执行以下操作来查找与正则表达式的匹配项。

using System;
using System.Text.RegularExpressions;
public class Example
{
    public static void Main()
    {
        string pattern = "[0-1]?[0-9]/[0-9]{2}/[0-9]{4}";
        string input = "Due Date: 01/26/2016 Date: 01/25/2016";
        foreach (var m in Regex.Matches(input, pattern)) {
            Console.WriteLine("'{0}' found at index {1}.", 
                       m.Value, m.Index);
        }
    }
}

该正则表达式具体表示 0 或 1(可选)

后跟一个数字,后跟一个斜杠,后跟两位数字,后跟一个斜杠,后跟四个数字。

我还假设您的第二个日期 01/252016 包含一个错字。

试试这个正则表达式:

(Due's)?(Date:)'s([0-1][0-2])'/([0-3][0-9])'/([0-2][0-9]{3})

由于两个字符串都包含"Date",我们可以使用它来进一步过滤掉其他字符串(您可能实际上并不想要所有日期)。由于 Due 是可选的,我们可以将其标记为可选。过滤掉格式不佳的日期有点困难,但您可以限制一些内容(如我上面所说的)。您必须单独验证日期才能确定。

这是一个正则表达式,只要格式正确,它就不会关心检查:

(Due's)?(Date:)'s([0-9]{2})'/([0-9]{2})'/([0-9]{4})

或者只是日期:

([0-9]{2})'/([0-9]{2})'/([0-9]{4})