[英]python regex findall returns two groups instead of just one
我正在使用包含一些葯物的數據框,我想從產品描述中提取的完整句子中提取劑量。
一些例子:
'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')]
如您所見,它返回兩組,而不僅僅是一組。 這也可能不是正確的程序,因為最后我只想要字符串的劑量部分。 你的解決方案是什么?
您可以捕獲必要的詳細信息,然后加入兩個組:
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?|)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.