You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用正则表达式匹配学术引用文献标题的技术问询

匹配学术引用文献标题的正则优化方案

嘿,我来帮你梳理下这个学术引用标题匹配的问题~先看看你给出的正则和示例内容:

你的原正则

(?!([Á-ÝA-Z\s\-])*?(\.|;|,)\s*)([^;]+?\.\s)

示例引用内容(加粗为目标标题)

BENVENISTE, É. Problemas de linguística geral. São Paulo: Ed. Nacional; EDUSP, 1976. Volume I. BERNERS-LEE, T. Semantic Web Concepts. 2005a. Disponível em: http://www.w3.org/2005/Talks/0517-boit-tbl . Acesso em: 25 set. 2014 BERNERS-LEE, T. Web for real people. 2005b. Disponível em . Acesso em: 25 set. 2014. BERNERS-LEE, T.; CAILLIA...

原正则的潜在问题

你的思路是用负向预查排除作者部分,但这个预查的范围有点宽泛,容易出现误匹配或者漏匹配的情况:

  • 没法处理多作者用分号分隔的场景(比如示例最后那条BERNERS-LEE, T.; CAILLIA...
  • 负向预查的逻辑可能会把标题里合法的大写字母开头内容误排除

优化后的正则方案

我调整了正则逻辑,先精准匹配作者格式,再捕获后续的标题内容,这样适配性更强:

方案一(使用\K重置匹配起点)

(?:[A-ZÁ-Ý]+(?:,\s*[A-ZÁ-Ý]\.)(?:;\s*[A-ZÁ-Ý]+(?:,\s*[A-ZÁ-Ý]\.))?\s*)+\K([^.;]+?\.\s)

方案二(使用后向肯定预查)

(?<=(?:[A-ZÁ-Ý]+,\s*[A-ZÁ-Ý]\.(?:;\s*[A-ZÁ-Ý]+,\s*[A-ZÁ-Ý]\.)?\s))([^.;]+?\.\s)

正则各部分解释

  • [A-ZÁ-Ý]+(?:,\s*[A-ZÁ-Ý]\.):匹配单个作者的标准格式(比如BENVENISTE, É.BERNERS-LEE, T.
  • (?:;\s*[A-ZÁ-Ý]+(?:,\s*[A-ZÁ-Ý]\.))?:可选匹配多作者的分号分隔格式(比如BERNERS-LEE, T.; CAILLIA...
  • \K(方案一):重置匹配的起始位置,让后续捕获组只提取标题内容,不用额外处理作者部分
  • (?<=...)(方案二):后向肯定预查,确认前面是合法的作者格式后,再捕获标题内容
  • ([^.;]+?\.\s):捕获标题内容,直到遇到句点+空格(排除分号,避免把出版信息的分号纳入标题范围)

测试效果

用这个正则匹配你的示例内容,能精准捕获到三个加粗的目标标题:

  1. Problemas de linguística geral.
  2. Semantic Web Concepts.
  3. Web for real people.

如果你的引用格式里标题可能包含缩写句点(比如J. Comput. Sci.),可以把[^.;]调整为[^;],再结合其他逻辑过滤,但当前示例的场景下,上面的正则已经完全够用啦~

内容的提问来源于stack exchange,提问作者Bruno Brito

火山引擎 最新活动