мне нужно найти значения внутри этой строки:Найти значение внутри строки
10days25hours15minutes
мне нужно получить количество дней, часов и минут, но строка может измениться, как это:
10d25h15m
мне нужно найти значения внутри этой строки:Найти значение внутри строки
10days25hours15minutes
мне нужно получить количество дней, часов и минут, но строка может измениться, как это:
10d25h15m
Предполагая, что входная строка состоит из трех десятичных чисел, каждое прерванных одним или несколькими не-цифр, вы можете использовать следующее регулярное выражение:
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}
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
.
Вы можете использовать регулярные выражения: 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"]);
}
+1 точно, что я собирался написать - рад, что я обновился! –
В результате не отображаются все число часов или минут – soamazing
@soamazing 'Days: 10 часов: 25 минут: 15' - это именно тот результат, который я получаю, когда запускаю образец кода (' Mono 2.10.6'). Фактически в начальном ответе я написал 'System.Text.Regex' вместо' System.Text.RegularExpressions.Regex', и я исправил его несколько секунд назад, но это не связано с вашей проблемой. – fardjad
Text.Split(new string[]
{"days", "hours", "minutes"},StringSplitOptions.RemoveEmptyEntries)
или
Text.Split(new string[]{"d", "h", "m"},StringSplitOptions.RemoveEmptyEntries)
верните свой порядковый номер ...
Всегда ли они в одном порядке? (т. е. дни, часы и минуты) – BlackBear
всегда будет в формате 10 (дневной spearator) 25 (разделитель часов) 15 (разделитель минут)? Если вы хотите, чтобы регулярное выражение заменило буквы на некоторый разделитель (а другой - на несколько разметчиков в один), а затем разделите на этот разделитель? В качестве альтернативы вы можете выполнить регулярное выражение по номерам и использовать группы для получения отдельных сумм. – John
Для этого вам понадобится спецификация, только 2 примера не разрезают ее. –