高级正则表达式:此模式的正则表达式是什么?

时间:2019-04-16 06:23:31

标签: regex

要在以下文本中标识所有作者的姓名:

@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-Diaz,Navarro David
  match2-吉恩斯,罗德里格斯·诺伊
  match3-Standefer,迈克尔
  match4-珍妮特·W
  match5-特鲁索,罗素

...等等

1 个答案:

答案 0 :(得分:1)

尽管对于想要以{开头的所有行捕获}author=之间的内容,然后使用\s*(?:,|\band\b)\s*正则表达式将其分割就可以轻松实现所需的内容将为您提供所有作者的姓名。

以防万一,如果您的正则表达式引擎基于PCRE,则可以使用此正则表达式,其group1内容将为您提供所需的作者姓名。

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

此正则表达式利用\G运算符来匹配以author=开头的行,然后使用{{1}开始匹配其中不包含and,的名称}}正则表达式部分

Regex Demo