Извлечение номера версии из списка путей с регулярным выражением - PullRequest
0 голосов
/ 12 декабря 2018

Рассмотрим следующие строки:

/bin/python2.7.5
/bin/python/2.7.5/log/dir
/bin/python2.7.5/src

Я хотел бы извлечь версию из переменной, поэтому для второй строки, которую я сделал:

if ($str =~ /(.*)\/python\/(.*?)\//) {
    my $version = $2;
}

Также для первой,Я могу сделать следующее регулярное выражение:

$str =~ /(.*)\/python(\d+\.)?(\d+\.)?(\*|\d+)/;

Но как я могу объединить эти регулярные выражения в одно основное регулярное выражение, чтобы (например) $2 содержал версию?Любой возможный способ сделать это короче?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Для всех предоставленных примеров вы можете использовать ([\d.]+), то есть:

if ($str =~ /([\d.]+)/) {
    my $version = $1;
}

Perl Demo
Regex Demo


Regex Объяснение:
enter image description here

0 голосов
/ 12 декабря 2018

Вы можете использовать

if ($str =~ /(.*)\/python\/?([^\/]*)/) {
    my $version = $2;
}

См. Демоверсию regex

Подробности

  • (.*)- Группа 1: любые 0+ символов, кроме символов разрыва строки, максимально возможное количество
  • \/python - /python подстрока
  • \/? - 1 или 0 / символов
  • ([^\/]*) - Группа 2: любые 0+ символов, кроме / char.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...