我需要在文本文件中找到特定的日期字符串。目前文件中有两个日期字符串 - “截止日期:2016年1月26日”和“日期: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;
}
答案 0 :(得分:1)
在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包含一个拼写错误。
答案 1 :(得分:0)
试试这个正则表达式:
(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})