Perl regex: извлечение имен из сложной строки - PullRequest
0 голосов
/ 24 января 2019

Мне нужно извлечь три имени из следующей строки:

author = {Kordesch, Karl and Simader, G {\ "u} nter and Wiley, John Ray},

Это должно обеспечить три совпадения:

  1. Кордеш, Карл

  2. Симадер, G {\ "u} nter

  3. Уайли, Джон Рэй

Я ломал голову безрезультатно.Любые предложения будут высоко ценится.Спасибо.

1 Ответ

0 голосов
/ 24 января 2019

Хотя я уверен, что вы можете как-то сделать это в одном регулярном выражении, проще всего сделать это пошагово.

Сначала разделите ключ / значение, разделив =.

my($key,$names) = split /=/, $string;

Теперь, когда у нас есть значение, мы можем удалить {},

$names =~ s/^{(.*)},?$/$1/;

Со всем, что вычистили, у вас есть Kordesch, Karl and Simader, G{\"u}nter and Wiley, John Ray, который достаточно легко разбить на имена.

my @names = split /\s+and\s+/, $names;

Конечный , заставляет меня подозревать, что это является частью более крупной структуры данных. В этом случае было бы безопаснее и надежнее анализировать структуру данных, а не пытаться анализировать ее ad hoc построчно. В комментариях было упомянуто, что это может быть TeX или BibTeX . любое количество модулей для разбора .

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