2011-11-25 3 views
2

мне нужно найти значения внутри этой строки:Найти значение внутри строки

10days25hours15minutes 

мне нужно получить количество дней, часов и минут, но строка может измениться, как это:

10d25h15m 
+0

Всегда ли они в одном порядке? (т. е. дни, часы и минуты) – BlackBear

+0

всегда будет в формате 10 (дневной spearator) 25 (разделитель часов) 15 (разделитель минут)? Если вы хотите, чтобы регулярное выражение заменило буквы на некоторый разделитель (а другой - на несколько разметчиков в один), а затем разделите на этот разделитель? В качестве альтернативы вы можете выполнить регулярное выражение по номерам и использовать группы для получения отдельных сумм. – John

+3

Для этого вам понадобится спецификация, только 2 примера не разрезают ее. –

ответ

4

Предполагая, что входная строка состоит из трех десятичных чисел, каждое прерванных одним или несколькими не-цифр, вы можете использовать следующее регулярное выражение:

var match = Regex.Match("10days25hours15minutes", @"(\d+)\D+(\d+)\D+(\d+)\D+"); 

var result = new TimeSpan(
    days: int.Parse(match.Groups[1].Value), 
    hours: int.Parse(match.Groups[2].Value), 
    minutes: int.Parse(match.Groups[3].Value), 
    seconds: 0); 

// result == {11.01:15:00} 
1
Regex.Match(str, @"(?<days>[0-9]+)(d|days) 
        (?<hours>[0-9]+)(h|hours) 
        (?<minutes>[0-9]+)(m|minutes)"); 

Затем извлекайте значения, используя match.Groups["days"].Value, match.Groups["hours"].Value, match.Groups["minutes"].Value.

6

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

(?<days>\d+)d\D*(?<hours>\d+)h\D*(?<minutes>\d+)m\D* 

, который соответствует 10days25hours15minutes и 10d25h15m. (а также другие)

Возможно, вы захотите сделать его более точным в соответствии с вашими потребностями.

Пример кода:

var match = System.Text.RegularExpressions.Regex.Match("10days25hours15minutes", @"(?<days>\d+)d\D*(?<hours>\d+)h\D*(?<minutes>\d+)m\D*", System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
if (match.Success) 
{ 
    Console.WriteLine("Days: {0} Hours: {1} Minutes: {2}", match.Groups["days"], match.Groups["hours"], match.Groups["minutes"]); 
} 
+0

+1 точно, что я собирался написать - рад, что я обновился! –

+0

В результате не отображаются все число часов или минут – soamazing

+0

@soamazing 'Days: 10 часов: 25 минут: 15' - это именно тот результат, который я получаю, когда запускаю образец кода (' Mono 2.10.6'). Фактически в начальном ответе я написал 'System.Text.Regex' вместо' System.Text.RegularExpressions.Regex', и я исправил его несколько секунд назад, но это не связано с вашей проблемой. – fardjad

0
Text.Split(new string[] 
    {"days", "hours", "minutes"},StringSplitOptions.RemoveEmptyEntries) 

или

Text.Split(new string[]{"d", "h", "m"},StringSplitOptions.RemoveEmptyEntries) 

верните свой порядковый номер ...

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