首页 > 解决方案 > Python正则表达式从科学论文中提取数字

问题描述

我不知道我是否在正确的地方发布了这个,但我希望我能得到一些人的帮助。

我是一名心理学家,在编程方面不是很熟练。尽管如此,我正在开发一种使用正则表达式从 PDF 中提取统计值的工具。

出现了一个我自己无法解决的问题。

我需要从以下术语中提取数字:

'F(1,110) = 15.18'

我需要一个正则表达式来提取括号中的两个数字,一个正则表达式来提取“=”之后的数字。注意:括号中的数字可以更改,并且每个字符串都不同。

有人可以帮帮我吗?

这是我到目前为止所尝试的:

r'(F(\d+.\d+))',
r'(F([:digit:], [:digit:]) = \d+.\d+)'

未检测到任何值。有什么建议么?

标签: pythonregex

解决方案


您可以使用 3 个捕获组来转义括号以逐字匹配它们。

如果您还可以使用单个模式而不是 2 个单独的模式:

F\((\d+),(\d+)\) = (\d+(?:\.\d+)?)
  • F从字面上匹配
  • \(匹配(
  • (\d+),(\d+)在一个组中捕获 2 次 1+ 数字,中间用逗号
  • \)匹配)
  • = 匹配由 2 个空格包围的等号
  • (\d+(?:\.\d+)?)在匹配 1 个以上数字的组中捕获,并带有可选的小数部分

如果最后一部分应包含小数,则可以(\d+\.\d+)改用。

正则表达式演示| Python 演示

例如

import re

regex = r"F\((\d+),(\d+)\) = (\d+(?:\.\d+)?)"
s = "F(1,110) = 15.18"
print(re.findall(regex, s))

结果

[('1', '110', '15.18')]

推荐阅读