2014-05-27 4 views
-2

У меня есть строка, которая состоит из имени файла. Я хочу извлечь часть даты из строки. имена файлов Как это: -Regex to extract Дата Часть из строки

CA48_SOLANO_Scan_May_2014-05-22_NONE.xls
NJ08_Gloucester_Scan_March_2014-03-26_ None.xlsm
OH06_AUGLAIZE_SCAN_MARCH_2014-03-12_NONE.xls
OH06_AUGLAIZE_SCAN_MARCH_2014-03-09_NONE.xls

Здесь я хочу, чтобы извлечь 2014-05-22, 2014-03-26, 2014-03-12, 2014-03-0 9 из каждого string.I знаю, что это возможно с Regex, но не в состоянии генерировать регулярное выражение WHI ch выполнить мои требования.

+0

@NirMH с просьбой ... – Noctis

+0

Вы можете сделать это достаточно легко с помощью методов 'string', таких как' IndexOf', чтобы найти начало (2014), и разрезать его 'Substring' – Noctis

+0

. Я уже упоминал, что я пытаясь использовать Regex, но не смог создать его до сих пор, так как это не так удобно в регулярном выражении. –

ответ

1

Это регулярное выражение работы для меня:

(?:.*)(\d{4}-\d{2}-\d{2})(?:.*) 

Демо-версия: http://regex101.com/r/zX8lM1

+0

+1 для regex с демо! – Adil

2

Делать это с String.split вместо регулярных выражений кажется простым

var arr = str.Split('_'); 
string date = arr[arr.Length-2]; 

Редактировать Вы можете использовать \d{4}-\d{2}-\d{2} где \d для числа и {num} для длины с дефисом - между ними.

Match match = Regex.Match(strDate, "(\\d{4}-\\d{2}-\\d{2})", RegexOptions.IgnoreCase); 
if (match.Success) 
    Console.WriteLine(match.Groups[1].Value); 
0

Предполагая, что количество цифр в год, месяц и день постоянны, как в приведенном выше примере, регулярное выражение будет:

_(?<date>\d{4}-\d{2}-\d{2})_ 

Тест для себя здесь: http://regex101.com/

0

Я не думаю, что вам нужен RegEx. С RegEx вы можете выбрать из строки, если это электронная почта, дата и т. Д.

Я думаю, что лучше написать функцию, чтобы получить дату из вашего имени файла. Как это.

public static DateTime getDateFromFileName(string fileName) 
    {    
     string[] temp = fileName.Split('-');   
     int year = Convert.ToInt32(temp[0].Remove(0, temp[0].Length - 4)); 
     int month = Convert.ToInt32(temp[1]); 
     int day = Convert.ToInt32(temp[2].Remove(2)); 
     DateTime date = new DateTime(year, month, day); 
     return date; 
    } 
0

Вы можете попробовать нижеследующий фрагмент кода.

string example = "<myfilename.txt>_19680615.csv"; 
    string time = Regex.Replace(example, @"(.*?)(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})\.csv", "${year}-${month}-${day}"); 
    Console.WriteLine(time); 

Также включайте в свой код пространство имен System.Text.RegularExpressions.

Смежные вопросы