Мне нужно разделить список между его первым элементом и остальными элементами, используя только подстановку регулярных выражений.
Списки элементов вводятся в виде строк, используя «##» в качестве разделителя, например:
''
'one'
'one##two'
'one##two##three'
'one##two words##three'
Моя попытка Perl на самом деле не работает:
my $sampleText = 'one##two words##three';
my $first = $sampleText;
my $rest = $sampleText;
$first =~ s/(.+?)(##.*)?/$1/g;
$rest =~ s/(.?+)(##)?(.*)/$3/g;
print "sampleText = '$sampleText', first = '$first', rest = '$rest'\n";
sampleText = 'one##two words##three', first = 'one', rest = 'ne##two words##three'
Обратите внимание на ограничения:
- разделитель - многосимвольная строка
- разрешены только подстановки регулярных выражений (1)
- Я мог бы при необходимости "зацепить" подстановки регулярных выражений
- Ожидаемый конечный результат - две строки: первый элемент и исходная строка спервый элемент обрезан (2)
- список может содержать от 0 до n элементов, каждая из которых представляет собой любую строку, не содержащую разделитель.
(1) Я работаю с этим довольнобольшая Perl-система, где в какой-то момент списки элементов обрабатываются с использованием предоставленных операций.Одним из них является подстановка регулярных выражений.Ни один из других один не применим.Решение проблемы с использованием полного кода Perl легко, но это будет означать изменение системы, что не является вариантом, как в этот раз.
(2) контекст - это библиографический формат Unimarc, в котором авторы публикацииразделить на стандартные поля Unimarc 700 $ a для первого автора и 701 $ a для всех остальных авторов.