Как извлечь в perl только часть строки? - PullRequest
0 голосов
/ 17 января 2020

У меня есть переменная, которая содержит путь, подобный этому:

$Path = "C:/Work/Job_V14/Myfile";

Эта переменная может меняться каждый раз, когда я запускаю код. Единственное, что никогда не меняется, это то, что в Пути у меня всегда будет _V и 2 di git (как в этом случае _V14).

Как получить из пути только часть _V + 2 di git?

Ответы [ 4 ]

2 голосов
/ 17 января 2020

Если путь всегда будет файлом в каталоге, имя которого вы хотите, я бы начал со следующего:

use Path::Class qw( file );

my path = "C:/Work/Job_V14/Myfile";
my $project = file($path)->dir->basename;   # Job_V14

Теперь мы используем совпадение для извлечения версии.

my ($version) = $project =~ /_V(\d+)\z/;    # 14
1 голос
/ 17 января 2020
$Path = "C:/Work/Job_V14/Myfile";

# this code makes the assumption that your _Vxx contains the first _ in the path string
my $first; my $second; my $result ;

($first, $second) = split('_',$Path,2);   # split off the part before _
($result) = split('/',$second) ;   # takes only the first element 
$result = "_" . $result ; #adding back the _

print $result . "\n" ;  # prints _V14

Если у вас есть несколько вхождений _ перед вашим _Vxx, то этот код требует корректировки.

1 голос
/ 17 января 2020

Вы можете использовать регулярное выражение для сопоставления подстроки, например:

$Path = "C:/Work/Job_V14/Myfile";

if ( $Path =~ m[ ( _V \d\d [/\\] ) ]x )
{
    my $match = $1 ;
    print "Matched '$match'\n";
}
else
{
    print "No match\n";
}

Выше предполагается, что _V + 2di git никогда не может появиться где-либо еще в строке. Если это так, регулярное выражение необходимо пересмотреть.

0 голосов
/ 17 января 2020

См. Следующий фрагмент кода

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

while( <DATA> ) {
    say $1 if m!(_V\d{2})/!;
}

__DATA__
C:/Work/Job_V14/Myfile
C:/Work/Project_01/Job_V12/SomeFile
C:/Work/Project_03/Job_V02/SomeFile
C:/Work/Job_V34/SomeFile

Вывод:

_V14
_V12
_V02
_V34
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...