簡體   English   中英

Python正則表達式從科學論文中提取數字

[英]Python regex extracting digits from scientific papers

我不知道我是否在正確的地方發布了這個,但我希望我能得到一些人的幫助。

我是一名心理學家,在編程方面不是很熟練。 盡管如此,我正在開發一種使用正則表達式從 PDF 中提取統計值的工具。

出現了一個我自己無法解決的問題。

我需要從以下術語中提取數字:

'F(1,110) = 15.18'

我需要一個正則表達式來提取括號中的兩個數字,一個正則表達式來提取“=”后面的數字。 注意:括號中的數字可以更改並且每個字符串都不同。

有人可以幫我嗎?

這是我迄今為止嘗試過的:

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

未檢測到任何值。 有什么建議?

您可以使用 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')]

您可以使用下一個正則表達式:

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())}")\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM