Вы можете сделать что-то вроде этого:
my $data = <<END;
1) Scheme ID: abc-456-hu5t10 (High priority) *
2) Scheme ID: frt-78f-hj542w (Balanced)
3) Scheme ID: 23f-f974-nm54w (super formula run) *
END
foreach (split(/\n/,$data)) {
$_ =~ /Scheme ID: ([a-z0-9-]+)\s+\(([^)]+)\)\s*(\*)?/ || next;
my ($id,$word,$star) = ($1,$2,$3);
print "$id $word $star\n";
}
Ключевым моментом является регулярное выражение:
Scheme ID: ([a-z0-9-]+)\s+\(([^)]+)\)\s*(\*)?
Что разбивается следующим образом.
Фиксированная строка «Идентификатор схемы:»:
Scheme ID:
Вслед за одним или несколькими символами a-z, 0-9 или -. Мы используем скобки, чтобы зафиксировать это как $ 1:
([a-z0-9-]+)
После одного или нескольких пробельных символов:
\s+
Далее следует открывающая скобка (от которой мы убегаем), за которым следует любое количество символов, которые не являются закрывающей скобкой, а затем закрывающая скобка (экранированная) Мы используем неэкранированные скобки, чтобы зафиксировать слова как $ 2:
\(([^)]+)\)
За ними следуют некоторые пробелы, возможно, *, захваченные как $ 3:
\s*(\*)?