[英]Extract a format of date from a string
我需要從給定的字符串中提取出生日期。 格式始終為"ddMMMyy" (for example "22NOV83")
。
問題是在dob之前和之后可能存在其他字符。 可能的輸入是: "DOB: 22NOV83", "CUSTOMER A DOB: 22NOV", "22NOV83 BLA BLA"
我認為通過使用這個正則表達式:
^\d{2}[a-zA-Z]{3}\d{2}$
我可以檢查字符串是否計算日期, 但是如何檢查字符串的一部分是否計算日期而不是提取它?
任何幫助,將不勝感激
刪除“^”和“$”
Regex.Match( "CUSTOMER A DOB: 22NOV99 blah", @"\\d{2}[a-zA-Z]{3}\\d{2}" );
這是一個應該有用的小片段。 請注意,您可以將Regex.Match()
與regex模式中的其他組一起使用,以執行進一步的驗證。 此外,如果其他數據可能在您希望提取的數據之外具有有效日期,則會使該過程進一步復雜化。
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
}
}
使用此模式匹配日期
(?:[DOB:]?\s+(\d{2}[a-zA-Z]{3}\d{2}))
希望這可以幫助
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中具有該日期。
如果沒有其他字符串將有數字,這將是有用的。
或者使用正則表達式其他帶數字的字段沒有問題:
string s = "your input";
Match d = Regex.Match(s, @"\d{2}[a-zA-Z]{3}\d{2}");
Response.Write(d);
如果這有用,請告訴我。
使用單詞邊界而不是錨點:
\b(\d{2}[a-zA-Z]{3}\d{2})\b
DOB在第1組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.