2016-05-06 53 views
3

我有很多項目,其中一些在以下格式的日期/時間開始字符串列表:C#正則表達式來刪除列表中的所有

2016-05-04 18:46:05.115 Copyright (c) 2014 Microsoft Corporation 

我期待通過循環和從包含該格式的列表中的所有項目中刪除該日期/時間。

目前我有這樣的:

var regexDateTime = "/^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})$/"; 
preperationMessages = preperationMessages 
    .Select(x => Regex.Replace(x, regexDateTime, "")) 
    .ToList(); 

它並不過濾日期的任何可言。任何幫助,將不勝感激。謝謝!

+0

是'2016年5月4日18:46:05.115'總是在你的字符串的開頭? – Shafizadeh

+0

當你寫一個正則表達式時,試着在它的開始處加上一個@這樣你就不必爲了c#IE而退出所有的東西var regexDateTime ='!「/ ^(\ d { 4})...「' –

+0

你不需要'/'在你的正則表達式的開始和結尾 –

回答

1

使用這個表達式:

var regex = @"^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\.(\d{3})"; 

的問題與您正則表達式是「$」結尾,這意味着字符串的結束,是不是你想要的。其他的一點是,你不要在csharp中使用正斜槓的開始和結尾的斜槓,就像你在javascript中一樣。

+0

你仍然有一個/在開始時應該被刪除。 – dman2306

+0

謝謝,我的不好。現在修復。 –

+0

謝謝!還必須添加。(\\ d {3})來擺脫ms。 – siegs

0

這也適用,如果你不希望使用正則表達式(這可能會更快得取決於你的消息集合的大小:

int dateChars = 23; 
DateTime output; 

// Remove leading date(s) 
preparationMessages = preparationMessages 
    .Select(x => x.Length > dateChars && DateTime.TryParse(x.Substring(0, dateChars), out output) ? x.Substring(dateChars+1) : x) 
    .ToList(); 
相關問題