我正在使用包含一些藥物的資料框,我想從產品描述中提取的完整句子中提取劑量。
我想要的示例:
Dexamethasonacetat 5 mg/10 mg, Lidocain-HCl 1H2O 30 mg/60 mg
#['5mg/10mg','30mg/60mg']
Anakinra 120 mg /-20 g /-12mg gentechnologisch hergestellt aus E. coli. 10mg pack
#['120mg/20g/12mg']
我可以使用 提取劑量\d (?:[.,]\d )*\s*(g|mg|),這讓我:
Dexamethasonacetat 5 mg/10 mg, Lidocain-HCl 1H2O 30 mg/60 mg
#['5mg','10mg','30mg','60mg']
Anakinra 120 mg /-20 g /-12mg gentechnologisch hergestellt aus E. coli. 10mg pack
#['120mg','20g','12mg','10mg]
如果/只發生一次,這樣做會更容易,但它可以發生多次..
uj5u.com熱心網友回復:
您可以使用模式獲取這些匹配項,然后在處理后洗掉空格和連字符
-?\b\d (?:[.,]\d )*\s*m?g(?:\s*/\s*-?\d (?:[.,]\d )*\s*m?g) \b
解釋
-?匹配可選連字符\b防止部分單詞匹配的單詞邊界\d (?:[.,]\d )*匹配 1 位可選小數部分\s*m?g匹配可選的空白字符,可選m的和g(?:非捕獲組作為一個整體重復\s*/\s*/可選空白字符之間的匹配-?\d (?:[.,]\d )*\s*m?g匹配與以前相同的數字模式
)關閉非捕獲組并重復 1 次以匹配至少一個帶有正斜杠的部分\b一個詞的邊界
請參閱正則運算式演示和Python 演示。
例子
import re
pattern = r"-?\b\d (?:[.,]\d )*\s*m?g(?:\s*/\s*-?\d (?:[.,]\d )*\s*m?g) \b"
strings = [
"Dexamethasonacetat 5 mg/10 mg, Lidocain-HCl 1H2O 30 mg/60 mg",
"Anakinra 120 mg /-20 g /-12mg gentechnologisch hergestellt aus E. coli. 10mg pack"
]
for s in strings:
print([re.sub(r"[\s-] ", "", m) for m in re.findall(pattern, s)])
輸出
['5mg/10mg', '30mg/60mg']
['120mg/20g/12mg']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479805.html
