我需要从给定字符串中提取出生日期。
格式始终为"ddMMMyy" (for example "22NOV83")
。
问题是dob之前和之后可能还有其他字符。
可能的输入是:"DOB: 22NOV83", "CUSTOMER A DOB: 22NOV", "22NOV83 BLA BLA"
我认为通过使用此正则表达式:
^\d{2}[a-zA-Z]{3}\d{2}$
我可以检查字符串是否计算日期,但是如何检查字符串的一部分是否计算日期而不是提取它?
任何帮助将不胜感激
答案 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组。