Расширенный регулярное выражение: что будет регулярное выражение для этого шаблона? - PullRequest
0 голосов
/ 16 апреля 2019

Хотите указать имена всех авторов в следующем тексте:

@misc{diaz2006automatic,
  title={AUTOMATIC ROCKING DEVICE},
  author={Diaz, Navarro David and Gines, Rodriguez Noe},
  year={2006},
  month=jul # "~12",
  note={EP Patent 1,678,025}
}


@article{standefer1984sitting,
  title={The sitting position in neurosurgery: a retrospective analysis of 488 cases},
  author={Standefer, Michael and Bay, Janet W and Trusso, Russell},
  journal={Neurosurgery},
  volume={14},
  number={6},
  pages={649--658},
  year={1984},
  publisher={LWW}
}


@article{gentsch1992identification,
  title={Identification of group A rotavirus gene 4 types by polymerase chain reaction.},
  author={GenTSCH, JoN R and Glass, RI and Woods, P and Gouvea, V and Gorziglia, M and Flores, J and Das, BK and Bhan, MK},
  journal={Journal of Clinical Microbiology},
  volume={30},
  number={6},
  pages={1365--1373},
  year={1992},
  publisher={Am Soc Microbiol}
}

Для приведенного выше текста регулярное выражение должно соответствовать:

match1 - Диас, Наварро Давид
match2 - Джинс, Родригес Ное
match3 - Стандефер, Майкл
match4 - Джанет W
match5 - Труссо, Рассел

... и т. Д.

1 Ответ

1 голос
/ 16 апреля 2019

Хотя то, что вы хотите, должно быть легко достижимо, захватывая содержимое между { и } для всех строк, начинающихся с author=, а затем просто разделяя его, используя \s*(?:,|\band\b)\s* регулярное выражение, которое даст вам все имена авторов.

Но на всякий случай, ваш движок регулярных выражений основан на PCRE, вы можете использовать это регулярное выражение, содержимое которого group1 даст вам имена авторов, как вы хотите.

^\s*author={|(?!^)\G((?:(?! and|, )[^}\n])+)(?: *and *)?(?:[^\w\n]*)

Это регулярное выражение использует *Оператор 1010 *\G для сопоставления строк, начинающихся с author=, а затем начинается сопоставление имен, которые не должны содержать and или , внутри него, используя (?!^)\G((?:(?! and|, )[^}\n])+)(?: *and *)?(?:[^\w\n]*) regex part

Regex Demo

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