Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用熊猫的优雅正则表达式-提取剂量信息_Python_Regex_Pandas_String_Dataframe - Fatal编程技术网

Python 使用熊猫的优雅正则表达式-提取剂量信息

Python 使用熊猫的优雅正则表达式-提取剂量信息,python,regex,pandas,string,dataframe,Python,Regex,Pandas,String,Dataframe,我有一个如下所示的数据框 df = pd.DataFrame({'text_1':['WHITE SOFT PARAFFIN 100G', 'VITAMIN B12 1MG/ML INJ 10ML','vitamin B1 100mg, B6 200mg, B12 200mcg tab','UREA CREAM 10% BP 100G', 'TOBRAMYCIN 0.3%/DEXA 1% EYE DROP 5ML','TERAzosin 5MG TAB (HYTRIN)','SODIUM CHL

我有一个如下所示的数据框

df = pd.DataFrame({'text_1':['WHITE SOFT PARAFFIN 100G', 'VITAMIN B12 1MG/ML INJ 10ML','vitamin B1 100mg, B6 200mg, B12 200mcg tab','UREA CREAM 10% BP 100G', 'TOBRAMYCIN 0.3%/DEXA 1% EYE DROP 5ML','TERAzosin 5MG TAB (HYTRIN)','SODIUM CHLORIDE 0.9% EYE DROP 5ML/10ML']})
我想从样本数据框中显示的药物列表中提取剂量信息

虽然,我能够达到90%的准确率,但我想与您核实一下,我如何以简单的方式或稳健的方式来最大限度地减少捕获不需要的信息

例如,我尝试了下面的方法,但结果不正确

df['text_1'].str.findall('[0-9]+\s*[mgMG/lLcC]+')

最后一行应该是
5ML/10ML
,但它被分成两行(这是不正确的)

另一个提示是,我知道我的所有剂量值都将以
数字开始,后面有一个空格和单位,如
MG
、MCG
ML
G
MG
MCG
ML

例如:
白色软石蜡100G
,我想提取
100G
。同样,对于10ML
注射液中的
维生素B12 1MG/ML,我想提取
1MG/ML和10ML
。我们提取了
1MG/ML
10ML
,因为它满足了我的提示

因此,我希望我的输出如下

怎么样

df.text_1.str.findall(r“\d+\s*[mc]*[lg]+/*(?:\d*\s*[mc]*[lg]+)?”,flags=re.IGNORECASE)
输出:

0                    [100G]
1            [1MG/ML, 10ML]
2    [100mg, 200mg, 200mcg]
3                    [100G]
4                     [5ML]
5                     [5MG]
6                [5ML/10ML]
Name: text_1, dtype: object
关于正则表达式:

  • 我们至少需要一些数字:
    \d+

  • 空格是可选的
    \s*

  • m
    c
    这样的前缀可能存在
    [mc]*

  • 实际装置预计将在那里
    [lg]+

  • 在这些
    /*

第二部分是对本部分稍加修改的部分,具体来说

  • 斜杠后面可能有数字,也可能没有数字,即
    \d*
  • 整个部分是可选的
  • 而不是被捕获
    ?:
我们使用大小写不敏感来节省
M
等的空间