从字符串中提取日期格式

时间:2014-03-04 06:13:31

标签: c# regex

我需要从给定字符串中提取出生日期。 格式始终为"ddMMMyy" (for example "22NOV83")

问题是dob之前和之后可能还有其他字符。 可能的输入是:"DOB: 22NOV83", "CUSTOMER A DOB: 22NOV", "22NOV83 BLA BLA"

我认为通过使用此正则表达式:

^\d{2}[a-zA-Z]{3}\d{2}$

我可以检查字符串是否计算日期,但是如何检查字符串的一部分是否计算日期而不是提取它?

任何帮助将不胜感激

5 个答案:

答案 0 :(得分:1)

删除“^”和“$”

Regex.Match( "CUSTOMER A DOB: 22NOV99 blah", @"\d{2}[a-zA-Z]{3}\d{2}" );

答案 1 :(得分:1)

这是一个应该有用的小片段。请注意,您可以将Regex.Match()与正则表达式模式中的其他组一起使用,以执行进一步的验证。此外,如果其他数据可能在您希望提取的数据之外具有有效日期,则会使该过程进一步复杂化。

  var extractedDates = new List<DateTime>();

  foreach (var s in inputs) {
    var m = Regex.Match(s, @"(\d{2}[A-Za-z]{3}\d{2})");
    if (m.Groups.Count == 1) {
      // No match
      continue;
    }
    try { 
      extractedDates.Add(DateTime.Parse(m.Groups[0].Value));
    } catch (FormatException) {
      // Regex matched but something else was wrong, i.e. 98ALS98
    }
  }

答案 2 :(得分:0)

使用此模式匹配日期

  (?:[DOB:]?\s+(\d{2}[a-zA-Z]{3}\d{2}))

答案 3 :(得分:0)

希望这有帮助

    DateTime d = new DateTime();
    string s = "CUSTOMER A DOB: 22NOV83"; // any string that contains date in <dd><3 chars of Month><YY>
    string date = s.Substring(s.IndexOfAny("0123456789".ToCharArray()),7);
    d = DateTime.Parse(date);
    Response.Write(d);

变量'date'将以字符串形式显示日期,'d'将在DateTime中具有该日期。

如果没有其他字符串会有数字,这将是有用的。

OR 使用正则表达式其他带数字的字段没有问题:

string s = "your input";
    Match d = Regex.Match(s, @"\d{2}[a-zA-Z]{3}\d{2}");
    Response.Write(d);

如果这有用,请告诉我。

答案 4 :(得分:0)

使用单词边界而不是锚点:

\b(\d{2}[a-zA-Z]{3}\d{2})\b

DOB在第1组。