我有一些DateTime的字符串,有些没有。我必须找出每个字符串是否包含DateTime。
请帮帮我。
字符串示例(俄语):
13 сентября 2013 г., 11:27 пользователь <support@example.com> написал:
13 сентября 2013 г., 11:29 пользователь Вячеслав Равдин <someone@example.com> написал:
13.09.2013, в 11:27, support@example.com написал(а):
答案 0 :(得分:1)
您需要为要识别的每个模式创建Regex
,然后将字符串与每个Regex
匹配,直到您有匹配或直到您尝试了所有Regex
ES。
public bool TryParseDate(string input, out DateTime result)
{
if (MatchPattern1(input, result))
{
return true;
}
if (MatchPattern2(input, result))
{
return true;
}
...
return false;
}
其中MatchPattern
方法各自查找特定的正则表达式:
private bool MatchPattern1(string input, out DateTime result)
{
Match match = Regex.Match(input, @"*pattern here*");
if (match.Success)
{
result = *build date based on matches*;
return true;
}
return false;
}
通过这种方式,您可以根据需要进行匹配(使用或不使用正则表达式),并使它们尽可能复杂。
答案 1 :(得分:1)
您可以将DateTime.TryParseExact
与俄语文化和正确的格式字符串一起使用。
string russianLines = @"
13 сентября 2013 г., 11:27 пользователь написал:
13 сентября 2013 г., 11:29 пользователь Вячеслав Равдин написал:
13.09.2013, в 11:27, blablahblah...";
CultureInfo ruCult = CultureInfo.CreateSpecificCulture("ru-RU");
string[] formats = new[]{"dd MMMM yyyy", "dd.MM.yyyy"};
string[] lines = russianLines.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var lineDates = new List<DateTime?>();
foreach (string line in lines)
{
string strDate = null;
string[] tokens = line.Split(',');
string[] parts = tokens.First().Split();
if (parts.Length == 1)
strDate = parts.First();
else
strDate = string.Join(" ", parts.Take(3));
DateTime dt;
if(DateTime.TryParseExact(strDate, formats, ruCult, DateTimeStyles.None, out dt))
lineDates.Add(dt);
else
lineDates.Add(null);
}
调试器中的结果:
[0] {13.09.2013 00:00:00} System.DateTime?
[1] {13.09.2013 00:00:00} System.DateTime?
[2] {13.09.2013 00:00:00} System.DateTime?
答案 2 :(得分:0)
你可以托盘这样的东西
<强>第一强>
改变文化
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru");
<强>第二强>
尝试解析你的字符串
private static DateTime ExtractDateTime(string str)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru");
string[] date = str.Split(',');
string[] needeedate = {""};
needeedate[0] = date[0];
for (var i = 1; i < date.Length; i++)
{
string[] temp1 = date[i].Split(' ');
foreach (var temp in from s in temp1 where !String.IsNullOrEmpty(s) select needeedate[0] + " , " + s)
{
try
{
var res = DateTime.Parse(temp);
needeedate[0] = temp;
}
catch (Exception)
{
return DateTime.Parse(needeedate[0]);
}
}
}
return new DateTime();
}
示例强>
string d = "13 сентября 2013 г., 11:27 пользователь <support@example.com> написал:";
var ext = ExtractDateTime(d);