regex 查找与引用文献标题匹配的最佳正则表达式

p4rjhz4m  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个字符串[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.
如何解决此问题?

eoxn13cs

eoxn13cs1#

我认为是因为,正则表达式中的点(.)是一个通配符,可以匹配任何字符,包括逗号和空格
为了解决这个问题,请查看以下内容:

(?<=\\.\\s)[^\\.]+(?=\\.\\sDOI)

字符串

  • (?<=\\.\\s):确保它是标题的开始(正向后查找以匹配点后跟空格)
  • [^\\.]+:它匹配一个或多个不是点的字符,因此这将排除作者姓名
  • (?=\\.\\sDOI):为了确保它是标题的结尾,积极的前瞻匹配一个点,后面跟着一个空格和“DOI”()

测试我的正则表达式:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String string = "[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";

        String regex = "(?<=\\.\\s)[^\\.]+(?=\\.\\sDOI)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(string);

        if (matcher.find()) {
            String title = matcher.group(0);
            System.out.println(title);
        }
    }
}


祝你好运!

7d7tgy0s

7d7tgy0s2#

一个更好的想法是使用正则表达式来提取DOI,并使用DOI来 * 查找 * 出版物的标题和其他元数据,例如使用CrossRef服务的API:

试图从引文文本中提取标题的问题在于,引文以各种格式提供,这取决于用于格式化它们的工具,期刊的要求等。使得提取变得复杂…并且很难用正则表达式可靠地完成。
另一方面,thatDOI(10.15625/0866- 708 X/53/6/5782)没有解析到任何内容,并且当我按标题搜索时,CrossRef不知道该论文。它看起来是一篇真正的论文,因为我可以用谷歌搜索找到它。然而,看起来“越南科学技术杂志”没有正确注册他们发表的论文的DOI!!
啧啧啧

相关问题