[英]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+)
代替。
例如
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.