我有一个字符串[1]T. Vu, V. Nguyen, T. Nguyen, T. Thieu, V. Pham, G. David, T. Ngo, and T. Le. Hollow gold nanostructures prepared by galvanic replacement reaction: synthesis and optical properties. DOI:https://doi.org/10.15625/0866-708X/53/6/5782
,它代表一篇论文的引文.我想写一个只匹配这个字符串的标题的正则表达式。结果预期为Hollow gold nanostructures prepared by galvanic replacement reaction: synthesis and optical properties.
我试过这个正则表达式(?<=. ).*?(?=[dD][oO][iI]:)
和(?<=\\.\\s)\\s*(.+?)\\s*(?=[dD][oO][iI]:)
,但它只给予我这个,我不知道为什么它不匹配最小的posible Vu, V. Nguyen, T. Nguyen, T. Thieu, V. Pham, G. David, T. Ngo, and T. Le. Hollow gold nanostructures prepared by galvanic replacement reaction: synthesis and optical properties.
如何解决此问题?
2条答案
按热度按时间eoxn13cs1#
我认为是因为,正则表达式中的点
(.)
是一个通配符,可以匹配任何字符,包括逗号和空格为了解决这个问题,请查看以下内容:
字符串
(?<=\\.\\s)
:确保它是标题的开始(正向后查找以匹配点后跟空格)[^\\.]+
:它匹配一个或多个不是点的字符,因此这将排除作者姓名(?=\\.\\sDOI)
:为了确保它是标题的结尾,积极的前瞻匹配一个点,后面跟着一个空格和“DOI”()测试我的正则表达式:
型
祝你好运!
7d7tgy0s2#
一个更好的想法是使用正则表达式来提取DOI,并使用DOI来 * 查找 * 出版物的标题和其他元数据,例如使用CrossRef服务的API:
试图从引文文本中提取标题的问题在于,引文以各种格式提供,这取决于用于格式化它们的工具,期刊的要求等。使得提取变得复杂…并且很难用正则表达式可靠地完成。
另一方面,thatDOI(10.15625/0866- 708 X/53/6/5782)没有解析到任何内容,并且当我按标题搜索时,CrossRef不知道该论文。它看起来是一篇真正的论文,因为我可以用谷歌搜索找到它。然而,看起来“越南科学技术杂志”没有正确注册他们发表的论文的DOI!!
啧啧啧