2016-04-06 5 views
1

У меня есть куча строк, некоторые из которых имеют один из следующих форматов:Как удалить DateTime подстроку из строки

"TestA (3/12/10)" 
"TestB (10/12/10)" 

DateTime часть строк всегда будет в формате mm/dd/yy.

Что я хочу сделать, это удалить всю часть DateTime, включая скобки. Если бы он всегда был такой же длины, я бы просто получил индекс / и вычтен его количеством символов до (. Но так как часть строки mm может быть одним или двумя символами, я не могу этого сделать.

Так есть способ сделать .Contains или что-то посмотреть, содержит ли строка указанный формат DateTime?

+1

FYI: Когда вы говорите 'mm', это обычно означает, дополненные нули. Если он не имеет нулевой размер, его обычно называют «m» (или часто «M», так как «m» можно путать с «минутами», в зависимости от вашего языка). –

+1

Каковы ограничения формата для остальной части строки? Будет ли когда-нибудь иметь место в противном случае (т. Е. Вы могли бы найти первое пространство и просто усечь там?) Как насчет круглых скобок? –

+0

Это был бы хороший кандидат для RegEx с захватом. Другая альтернатива, если в каждой строке есть только одна (и), заключается в использовании «LastIndexOf» для закрытия). – Tim

ответ

4

Вы могли бы используйте регулярное выражение, чтобы исключить возможные части даты, если вы можете быть уверены, что они будут последовательно находиться в определенном формате с использованием метода :

var updatedDate = Regex.Replace(yourDate,@"\(\d{1,2}\/\d{1,2}\/\d{1,2}\)",""); 

Вы можете see a working example of it here, что дает следующий результат:

TestA (3/12/10) > TestA 
TestB (10/12/10) > TestB 
TestD (4/5/15) > TestC 
TestD (4/6/15) > TestD 
+0

Ответ каждого остался, просто отметив это правильно, потому что рабочий пример опубликован. – pfinferno

1

Используйте RegEx для этого. Я рекомендую:

\(\d{1,2}\/\d{1,2}\/\d{1,2}\) 

См. RegExr для этого.

1

Regex могут быть использованы для этого, что-то типа:

string replace = "TestA (3/12/10) as well as TestB (10/12/10)"; 
string replaced = Regex.Replace(replace, "\\(\\d+/\\d+/\\d+\\)", ""); 
2

Вы всегда можете использовать регулярное выражение для замены строки

Вот пример

var regEx = new Regex(@"\(\d{1,2}\/\d{1,2}\/\d{1,2}\)"); 
var text = regEx.Replace("TestA (3/12/10)", ""); 
1

Если я понять это правильно, вы просто хотите приобрести имя теста каждой строки. Скопируйте этот код в событие нажатия кнопки.

string Old_Date = "Test SomeName(3/12/10)"; 
string No_Date = ""; 
int Date_Pos = 0; 
Date_Pos = Old_Date.IndexOf("("); 
No_Date = Old_Date.Remove(Date_Pos).Trim(); 
MessageBox.Show(No_Date, "Your Updated String", MessageBoxButton.OK); 

Подводя итог в одной строке кода

No_Date = Old_Date.Remove(Old_Date.IndexOf("(")).Trim(); 
Смежные вопросы