Perl регулярное выражение, чтобы получить конечные числа - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь в основном пытаться отделить определенное количество текста от одного или нескольких чисел, которые появляются в конце.Ниже работает, когда есть 1 трейлинг-номер, но не когда есть два или более?Разве (\ d +) не должен получать "12" в "P_TIME12"?

my @strs = ('P_ABC1','P_DFRES3','P_TIME12');
foreach my $str (@strs) {
        if ($str =~ /^P_(\w+)(\d+)$/) {
                print "word " . $1 . " digits " . $2 . "\n";
        }
}

Результат в

word ABC digits 1
word DFRES digits 3
word TIME1 digits 2

TIA

Ответы [ 4 ]

1 голос
/ 20 марта 2012

В случае, если для вас приемлемо также захватывать пробелы в первой части , более простое решение - сопоставить что-либо неуклюже перед конечными числами, а затем конечными числами жадность .

Это имеет то преимущество, что вы можете сопоставлять четные цифры в первой части (при условии, что они не появляются в конце).И пробелы также, как уже говорилось.

То есть:

my @strs = qw(P_1ABC1 P_DFRES3 P_3TIME12);
foreach (@strs) {
    if ( /^P_(.*?)(\d+)$/ ) {
        print ">$1<", "\t\t", ">$2<", "\n"
    }
}

, который производит:

>1ABC<      >1<
>DFRES<     >3<
>3TIME<     >12<
1 голос
/ 20 марта 2012
/^P_(\D+)(\d+)$/

Класс символов \d соответствует цифрам; его отрицание \D соответствует всему остальному.

1 голос
/ 20 марта 2012

\w содержит цифры, вместо них используйте [_a-zA-Z], если единственные цифры находятся в конце

и \w+ являются жадными, они сначала будут соответствовать целому слову и ничего не оставят для \d+, поэтому необходимо вернуть 1 символ назад, а последний символ достаточно хорош для \d+

если вы хотите ленивый оператор, потому что у вас есть цифры в середине, используйте ^P_(\w+?)(\d+)$

0 голосов
/ 20 марта 2012

\ w соответствует "символам слова", включая цифры и подчеркивание. Поскольку вы запросили хотя бы одну цифру (\ d +), \ w является жадным и тоже соответствует.

Вы должны быть более явным, чем \w, и использовать вместо него /^P_([A-Za-z_]+)(\d+)$/.

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