我正在使用包含一些藥物的資料框,我想從產品描述中提取的完整句子中提取劑量。
一些例子:
'Anakinra 100 g, gentechnologisch hergestellt aus E. coli.'
'Anakinra 100 mg, gentechnologisch hergestellt aus E. coli.'
'Anakinra 10.5 g, gentechnologisch hergestellt aus E. coli.'
'Anakinra 10, gentechnologisch hergestellt aus E. coli.'
我希望有:
'100g'
'100mg'
'10.5g'
'10'
因為我想對每個產品都這樣做,所以我決定使用帶有產品名稱的正則運算式作為變數,這樣我以后可以為完整的產品串列運行一個回圈。
我試過:
a_string = "Anakinra 100 mg, gentechnologisch hergestellt aus E. coli."
pattern = 'Anakinra'
re.findall(f"({pattern}\s*\d (?:[.,]\d )*\s*\b(g|mg|)", a_string)
#[('Anakinra 100 mg', 'mg')]
如您所見,它回傳兩組,而不僅僅是一組。這也可能不是正確的程式,因為最后我只想要字串的劑量部分。你的解決方案是什么?
uj5u.com熱心網友回復:
您可以捕獲必要的詳細資訊,然后加入兩個組:
import re
a_string = "Anakinra 100 mg, gentechnologisch hergestellt aus E. coli."
pattern = 'Anakinra'
print ( [f"{x}{y}" for x,y in re.findall(rf"(?:{pattern})\s*(\d (?:[.,]\d )*)\s*(g|mg|)", a_string)] )
# => ['100mg']
請參閱Python 演示。
請參閱正則運算式演示。詳情:
(?:Anakinra)- 一個關鍵字(我保留組以防有多個關鍵字,例如Anakinra|Anakirna)\s*- 零個或多個空格(\d (?:[.,]\d )*)- 第 1 組:一位或多位數字,然后是或的零次或多次重復,.以及,一位或多位數字\s*- 零個或多個空格(g|mg|)- 第 2 組:g,mg, 或什么都沒有(你也可以使用(mg?|))
uj5u.com熱心網友回復:
您可以嘗試使用以下正則運算式:
(?![^\d] )[^,]
解釋:
(?![^\d] ): 匹配除數字以外的任何字符的負前瞻[^,]: 逗號以外的任何字符
在這里試試。
編輯:如果您需要更嚴格的版本。
(?!^'[^\d] )\d (\.\d)?( m?g)?
解釋:
(?!^'[^\d] ): 匹配的負前瞻...^': 字串開頭 引號[^\d]: 數字以外的任意字符組合
\d: 數字組合(\.\d )?:點 數字的可選序列( m?g)?: 可選空間序列 可選mg
在這里試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477711.html
