С массивом символов наверное можно какими-то выражениями, но так тоже можно
string str = "PT7M4S";
char[] symbols = { '0','1','2','3','4','5','6','7','8','9' }; //определяем возможные значения времени
int quanMin; //тут храним сколько знаков отводится на минуты
int quanSec; //на секунды
if (str.IndexOfAny(symbols, 3) == 3)// проверяем сколько знаков отводится под минуты
{
quanMin = 2; //если под индексом 3 в строке находится цифра
}
else
{
quanMin = 1; //если под индексом 3 в строке не цифра
}
if (quanMin == 1) // проверяем сколько знаков отводится под секунды с учётом того, сколько отвели под минуты
{
quanSec = str.IndexOfAny(symbols, 5) == 5 ? 2 : 1; //индекс сдвигается, в зависимости от колличества знаков, отведённых под минуты
}
else
{
quanSec = str.IndexOfAny(symbols, 6) == 6 ? 2 : 1;
}
TimeSpan timespan = new TimeSpan(0, int.Parse(str.Substring(2, quanMin)), int.Parse(str.Substring((quanMin == 1 ? 4 : 5), quanSec))); //создаём объект TimeSpan
Console.WriteLine(timespan); //вывод
//=>00:07:04