@davron2813

Как Достать часть из строки в c#?

Привет у меня есть строка
0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 39 ..............09
как мне достать вот эту 30 39 часть или другой пример

0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............01
как мне достать вот эту 3D 12 7E часть

Ну как бы вместо 30 39 может быть и другие числа
и мне как бы нужно брать часть которая начинается после нулей и заканчивается до пробела с точкой ?
  • Вопрос задан
  • 3916 просмотров
Пригласить эксперта
Ответы на вопрос 3
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Раз пошла такая пьянка, предложу вариант без регулярных выражений:
// входящие данные
string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 39 ..............09";
// получаем позицию первой найденной точки
int endIndex =  data.IndexOf(".");
// получаем позицию первого вхождения символов 00
// с конца строки начиная с endIndex
int startIndex = data.LastIndexOf("00", endIndex) + 2; // + размер искомых символов
		
// выделяем часть строки и удаляем лишние пробелы по бокам
string result = data.Substring(startIndex, endIndex - startIndex).Trim();
		
// выводим результат
Console.WriteLine(result);

// можно одной строкой написать, но так проще понять

Посмотреть, как это работает, можно тут.

Регулярные выражения имеет смысл использовать, если шаблон поиска и/или данные будут сложными. В рамках текущего вопроса, все вроде бы просто, можно без потенциально опасных регулярных выражений обойтись (прожорливость, зацикливание).

Еще вот такой можно сделать вариант:
string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............01";
string result = data.Replace("0x", "").Replace("00", "").TrimEnd("0123456789.".ToCharArray()).Trim();
Console.WriteLine(result);

Или:
string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............00";
string result = data.Substring(2).TrimStart("0 ".ToCharArray()).TrimEnd("0123456789.".ToCharArray()).Trim();
Console.WriteLine(result);
Ответ написан
grigorylug
@grigorylug
string strRegex = @"0[x][0]+([1-90a-fA-F]+)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............01";

foreach (Match myMatch in myRegex.Matches(strTargetString.Replace(" ", string.Empty)))
{
  if (myMatch.Success)
  {
    // получаем значение 3D127E
  }
}
Ответ написан
Комментировать
@bmforce
Используя регулярные выражения:

Regex reg = new Regex(@"0x(00 )+(.+) \.");
Match match = reg.Match("0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 39 ..............09");
Console.WriteLine(match.Groups[2].Value);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы