использование регулярного выражения на числах

1

Пользователь вводит данные типа 4.0.9

У меня есть список таких чисел в файле 4.0.8, 4.0.9, 4.0.10 и т.д. В этом случае я должен выбрать 4.0.9 из этих трех.

Но если файл содержит как 4.0.8, 4.0.9+, 4.0.10 тогда мне нужно скопировать и 4.0.9 и 4.0.10.

Также, если он имеет 4.0.8, 4.0.9, 4.0.10+ тогда мне нужно скопировать только 4.0.9

Я пытался с регулярным выражением в С#, но не для всех тестовых случаев. Любая идея, как реализовать эту логику или любую встроенную функцию?

  • 0
    Внутренние функции недоступны. Напишите свою собственную логику - проанализируйте ее в списке версий вместе с информацией, если версия включает будущие версии, и используйте этот список при сопоставлении с конкретным номером.
  • 2
    Ваши ценности всегда упорядочены? Если это так, вы можете просто разделить на «,» и перебрать значения. Если искомое значение содержит «+», тогда возьмите следующий элемент в массиве, если он существует.
Показать ещё 10 комментариев
Теги:

1 ответ

1

Если я правильно понимаю ваши требования, вы можете записать его следующим образом. Предполагая, что у вас есть list версий (unsorted), вы можете разобрать его в списке помощников. Обратите внимание, что я дополнительно сортирую версии из list, чтобы сделать логику более ясной:

string list = "4.0.8, 4.0.9+, 4.0.10";
var versions =
list.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => new
    {
       Version = Version.Parse(s.TrimEnd('+')),
       FutureReleases = s.EndsWith("+")
    })
    .OrderBy(a => a.Version);

Затем просто перебирайте его при подборе определенного input:

string input = "4.0.9";
var version = Version.Parse(input);
var output = versions.SkipWhile(a => a.Version < version);
var first = output.FirstOrDefault();
if (first != null && !first.FutureReleases)
{
    output = versions.TakeWhile(a => a.Version == version);
}

Здесь мы просто опускаем более низкую версию и принимаем одну версию (если + не указана) или все выше (дополнительно +).

  • 0
    Этот код выдает результат как 4.0.9 Но результат должен быть 4.0.9 и 4.0.10
  • 0
    @SatheeshKurunthiah, я отредактировал свой ответ в соответствии с вашими комментариями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню