Member 12277263 Ответов: 2

Извлечение номера версии из строки


Всем привет,

если я передам строку (verstring = = "vername.1.19. 5"), она вернет версию, потому что я игнорирую Currentver[0]. если я хочу передать verstring == "1.19.5".

Я имею в виду, что получу verstring в обоих форматах с именем версии (vername) или только с версией (1.19.5)

public VerInfo(string verString)
        {
            string[] currentVer;

            if (versionString.Contains("."))
                currentVer= versionString.Split(".".ToCharArray());
            else
                currentVer= versionString.Split(":".ToCharArray());

            a= Convert.ToByte(currentVer[1]);
            b= Convert.ToByte(currentVer[2]);
            c= Convert.ToByte(currentVer[3]);
        }


Что я уже пробовал:

Я пробовал использовать длину строки, здесь длина строки варьируется


if (versionString.Длина > 5)

2 Ответов

Рейтинг:
16

CPallini

Вы могли бы использовать регулярное выражение, через Regex класс.
Попробуйте, например

public static void Main()
{
  string[] verstring = new string[] { "vername.1.19.5", "1.19.5" };

  Regex r = new Regex(@"(?:vername\.?:)?(\d+)\.(\d+)\.(\d+)");
  for (int n = 0; n < 2; ++n)
  {
    System.Console.Write("Input string: '{0}', extracted numbers: ", verstring[n]);
    Match m = r.Match(verstring[n]);
    if (m.Success)
    {
      for (int i = 0; i < 3; ++i)
        System.Console.Write("'{0}' ", m.Groups[i + 1].Captures[0]);
      System.Console.WriteLine();
    }
  }
}


Выход:
Input string: 'vername.1.19.5', extracted numbers: '1' '19' '5' 
Input string: '1.19.5', extracted numbers: '1' '19' '5' 


Member 12277263

спасибо
Есть ли способ, используя split, мы можем извлечь это число.

Рейтинг:
1

Mehedi Shams

Привет Member 12277263,

Ваша проблема в основном заключается в том, чтобы понять, если currentVer[0] является ли строка ('vername') или нет, и в соответствии с этим разбирайте остальную информацию о версии.

Быстрый обходной путь:

1) Проверьте, является ли первый индекс строкой ('vername').
2) в соответствии с этим установите стартер индекса синтаксического анализа - если он должен начинаться с 0 или 1.

public void VerInfo(string verString)
{
    string[] currentVer;

    if (verString.Contains("."))
        currentVer = verString.Split(".".ToCharArray());
    else
        currentVer = verString.Split(":".ToCharArray());

    int Index = 0;
    if (currentVer[0].ToLower().Equals("vername"))
        Index = 1;
    else Index;

    byte a = Convert.ToByte(currentVer[Index++]);
    byte b = Convert.ToByte(currentVer[Index++]);
    byte c = Convert.ToByte(currentVer[Index]);
}
Вы можете дополнительно уточнить оператор IF-ELSE, заменив его тернарным оператором. Я сделал это не для ясности.