В случае, если для вас приемлемо также захватывать пробелы в первой части , более простое решение - сопоставить что-либо неуклюже перед конечными числами, а затем конечными числами жадность .
Это имеет то преимущество, что вы можете сопоставлять четные цифры в первой части (при условии, что они не появляются в конце).И пробелы также, как уже говорилось.
То есть:
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<