Python正则表达式从科学论文中提取数字

Python正则表达式从科学论文中提取数字,python,regex,Python,Regex,我不知道我是否把这个贴在了正确的地方,但我希望我能从别人那里得到一些帮助 我是一名心理学家,不太擅长编程。尽管如此,我正在开发一个工具,它使用正则表达式从PDF中提取统计值 出现了一个我自己无法解决的问题 我需要从以下术语中提取数字: 'F(1,110) = 15.18' 我需要一个正则表达式来提取括号中的两个数字,一个正则表达式来提取“=”后面的数字。 注意:括号中的数字可以更改,并且每个字符串的数字都不同 有人能帮我吗 这就是我迄今为止所尝试的: r'(F(\d+.\d+))', r'(F

我不知道我是否把这个贴在了正确的地方,但我希望我能从别人那里得到一些帮助

我是一名心理学家,不太擅长编程。尽管如此,我正在开发一个工具,它使用正则表达式从PDF中提取统计值

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

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

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

有人能帮我吗

这就是我迄今为止所尝试的:

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

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

您可以使用3个跳过括号的捕获组来逐字匹配它们

如果您也可以使用一个图案而不是两个单独的图案:

F\((\d+),(\d+)\) = (\d+(?:\.\d+)?)
  • F
    逐字匹配
  • \(
    匹配
  • (\d+),(\d+)
    在一个组中捕获2个1+位数,中间用逗号
  • \)
    匹配
  • =
    匹配由两个空格包围的等号
  • (\d+(?:\。\d+))
    在一个组中捕获匹配1+个数字和小数的可选部分
如果最后一部分应该包含小数,则可以使用
(\d+\.\d+

|

比如说

import re

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

[('1', '110', '15.18')]
您可以使用正则表达式:

代码:


请注意,Python
re
不支持POSIX字符类,无需尝试
[:digit:][/code>或
[:digit:][/code>检查、
re.search(r'F\((\d+)、(\d+)、s)
re.search(r'=\s*(\d+(?:\.\d+)),s)
-尝试这个游戏场来设计您的正则表达式。粘贴一些你想在上面使用的文本,粘贴你的正则表达式,编辑正则表达式直到成功我注意到的第一件事是:如果你需要文字
字符,你需要对它们进行转义(
)。
r'F\((?P\d+,\d+)=(?P\d+)
,如果你使用这个,你可以提取第一个数字作为
.group('args')
,第二个数字作为
.group('value')
)(
(?P…)
是Python中的命名组)问题是我需要两个单独的模式,因为下一步需要对数据进行分类。(前两个值是自由度,第三个值是f值)。谢谢你的回答@sascha91如果您想要2个模式,您可以保持相同的模式,但将捕获组划分为2个模式,例如和
F\((\d+) ?, ?(\d+)\) ?= ?(\d+(?:\.\d+)?)
import re

strings = ["F(1,110) = 15.18", "F(1,110) =15.18", "F(1,110)= 15.18", "F(1,110)=15.18", "F(1, 110)=15.18", "F(1 ,110)=15.18", "F(1 , 110)=15.18", "F(1,110) = 100"]
for string in strings:
    matches = re.search(r"F\((\d+) ?, ?(\d+)\) ?= ?(\d+(?:\.\d+)?)", string)
    print(f"\"{string}\" => {', '.join(matches.groups())}")\