Python正则表达式从科学论文中提取数字
我不知道我是否把这个贴在了正确的地方,但我希望我能从别人那里得到一些帮助 我是一名心理学家,不太擅长编程。尽管如此,我正在开发一个工具,它使用正则表达式从PDF中提取统计值 出现了一个我自己无法解决的问题 我需要从以下术语中提取数字:Python正则表达式从科学论文中提取数字,python,regex,Python,Regex,我不知道我是否把这个贴在了正确的地方,但我希望我能从别人那里得到一些帮助 我是一名心理学家,不太擅长编程。尽管如此,我正在开发一个工具,它使用正则表达式从PDF中提取统计值 出现了一个我自己无法解决的问题 我需要从以下术语中提取数字: 'F(1,110) = 15.18' 我需要一个正则表达式来提取括号中的两个数字,一个正则表达式来提取“=”后面的数字。 注意:括号中的数字可以更改,并且每个字符串的数字都不同 有人能帮我吗 这就是我迄今为止所尝试的: r'(F(\d+.\d+))', r'(F
'F(1,110) = 15.18'
我需要一个正则表达式来提取括号中的两个数字,一个正则表达式来提取“=”后面的数字。
注意:括号中的数字可以更改,并且每个字符串的数字都不同
有人能帮我吗
这就是我迄今为止所尝试的:
r'(F(\d+.\d+))',
r'(F([:digit:], [:digit:]) = \d+.\d+)'
未检测到任何值。有什么建议吗?您可以使用3个跳过括号的捕获组来逐字匹配它们 如果您也可以使用一个图案而不是两个单独的图案:
F\((\d+),(\d+)\) = (\d+(?:\.\d+)?)
逐字匹配F
匹配\(
(
在一个组中捕获2个1+位数,中间用逗号(\d+),(\d+)
匹配\)
)
匹配由两个空格包围的等号=
在一个组中捕获匹配1+个数字和小数的可选部分(\d+(?:\。\d+))
(\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())}")\