Ваши регулярные выражения могут быть упрощены:
([\d]*$) ([\d]*)c$
вам не нужны квадратные задники
(\d*$) (\d*)c$
Но я бы порекомендовал вам требовать, чтобы в вашем номере была хотя бы цифра, поэтому используйте + вместо *
(\d+$) (\d+)c$
Теперь вы можете объединить их вместе:
(\d+)(c?)$
Я бы не рекомендовал делать вычисления внутри регулярного выражения.
Мы взяли 'c' во второй скобке, чтобы мы могли работать с этой информацией.
Вот как все это выглядело бы в Perl, пожалуйста, измените его соответствующим образом:
if( m/(\d+)(c?)$/ ) {
if( $2 eq 'c' ) {
$dollars = $1/100;
} else {
$dollars = $1;
}
print "$_ are $dollars dollars\n"
}
Как я прокомментировал выше: calculatino может быть сделано в регулярном выражении / подстановке
s/.*?(\d+)(c?)$/$1*($2?0.01:1)/e
но это может быть немного запутано