Skip to main content
 首页 » 编程设计

python之如何使用 Python 和正则表达式从引文中提取页码

2025年05月04日22dyllove98

我正在尝试使用正则表达式从引文中提取页码。

这是我正在使用的测试数据:

  • 期刊名称,卷。 20,第 2 号; p. 15
  • 期刊名称,卷。 20、第2期:人名(1990-2010); p. 15
  • 期刊名称,卷。 20、第2期:人名(1990-2010);第 15-20
  • 期刊名称,卷。 20、第2期:人名(1990-2010);第 15 页-
  • 期刊名称,卷。 20,第 2 号; 20-25
  • 期刊名称,卷。 20,第 2 号; ISSN:1234-1234(打印); 20-25
  • 期刊名称,卷。 20,第 2 号; 20-25; ISSN:1234-1234(打印)
  • 期刊名称,卷。 20,第 2 号; ISSN:1234-1234(打印); ISSN:1234-1234(在线); 20-25
  • 期刊名称,卷。 20,第 2 号; ISSN 1234-1234(打印); ISSN 1234-1234(在线); 20-25

当使用以下正则表达式时:

(?![^()]*\))(\d+-\d+) 

上面粗体的值是匹配的。

我想改进正则表达式以不匹配任何 \d+-\d+在“ISSN”或“ISSN:”之后。我尝试使用 (?<![ISSN:?\s]) 添加后视但没有成功。

关于如何实现这一目标并仅匹配以下值有什么想法吗?

  • 期刊名称,卷。 20,第 2 号; p. 15
  • 期刊名称,卷。 20、第2期:人名(1990-2010); p. 15
  • 期刊名称,卷。 20、第2期:人名(1990-2010);第 15-20
  • 期刊名称,卷。 20、第2期:人名(1990-2010);第 15 页-
  • 期刊名称,卷。 20,第 2 号; 20-25
  • 期刊名称,卷。 20,第 2 号; ISSN:1234-1234(打印); 20-25
  • 期刊名称,卷。 20,第 2 号; 20-25; ISSN:1234-1234(打印)
  • 期刊名称,卷。 20,第 2 号; ISSN:1234-1234(打印); ISSN:1234-1234(在线); 20-25
  • 期刊名称,卷。 20,第 2 号; ISSN 1234-1234(打印); ISSN 1234-1234(在线); 20-25

请您参考如下方法:

这解决了我的问题:

re.search(r'[^ISN:?](?![^()]*\))\s(\d+-\d+)', s).group(1) 

感谢大家的帮助。仍然欢迎更好的解决方案。