如何在Python中为表数据生成正则表达式

2024-09-26 18:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,是一个.Txt文件,我想做一个正则表达式,可以从中解析一些数据

我已经试过了,但是我不能得到我想要的

这是一种表格数据,其他文件的格式可能相同

这里我添加了这些数据,请将其视为.txt文件

我们将不胜感激


            Tribhuwan  Diagnostic Centre |  HOSPITALROAD, Morne) 


                                                                                  East Champaran- 845401 (Bihar) 


                                 (FULLY AUTOMATED   & COMPUTERISED   LAB)        Mob. :+9162046  29003 
             Name        HAJAN sadshaj                    Booking Date           22/s/2020 
             G/A   male  18 Yrs                        Reporting Date         22/05/2020 
             Lab No.     10203693                              Sample Collected At    Lab 
             Ref. By Dr. I.C.U 
                  ;                                                                          UVLO 
             Test Name                                  Value         Unit            Biological Ref Interval 
                                           COMPLETE   BLOOD   COUNT (CBC) 
             TOTAL LEUCOCYTES    COUNT (TLC)            23160         cells/cmm       4000 - 11000 
             DIFFERENTIAL LEUCOCYTES  COUNT (DLC) 
             NEUTROPHILS                                93.4          %               45.0 - 65.0 
             LYMPHOCYTES                                 3.3          %               20.0 - 45.0 
             MONOCYTES                                   3.1          %               4.0 - 10.0 
             EOSINOPHILS                                0.2           %               0.0 - 5.0 
             BASOPHILS                                   0.0          %               0.0-1.0 
             ABSOLUTE   NEUTROPHILS                      21620.0                      3000.0 - 7000.0 
             ABSOLUTE   LYMPHOCYTES                      750.0                        800.0 - 4000.0 
             ABSOLUTE  MONOCYTES                         730.0                        0.0 - 1200.0 
             ABSOLUTE  EOSINOPHILS                       50.0                         0.0 - 500.0 
             ABSOLUTE  BASOPHILS                         10.0                         0.0 - 100.0 
             RBC  COUNT                                  4.31         Millions/cmm    3.80 - 5.80 
             HAEMOGLOBIN   (Hb)                          13.1         gm/dl            11.0 - 16.5 
             P.C.V/HCT                                   41.2         %                35.0 - 50.0 
             MCV                                         95.5         fl.              80.0 - 97.0 
             MCH                                         30.3         Picogram         26.5 - 35.5 
             MCHC                                        31.8         g/dl             31.5-35.5 
             RDW  / SD                                   49.7         FI               37.0 - 54.0 
             RDW  / CV                                   12.3         %                10.0 - 15.0 
             PLATELET  COUNT                             148000       /cmm             150000 - 450000 
             PDW                                         17.0         fl               10.0 - 18.0 
             MPV                                         13.3         fl               6.5 - 11.7 
             PCT                                         0.198        %                0.108 - 0.282 


Le 


_ 

我只想从中得到前两列

我想要的输出(测试名称、值):

             TOTAL LEUCOCYTES    COUNT (TLC)            23160       
             DIFFERENTIAL LEUCOCYTES  COUNT (DLC) 
             NEUTROPHILS                                93.4         
             LYMPHOCYTES                                 3.3         
             MONOCYTES                                   3.1         
             EOSINOPHILS                                0.2       
             BASOPHILS                                   0.0         
             ABSOLUTE   NEUTROPHILS                      21620.0                     
             ABSOLUTE   LYMPHOCYTES                      750.0                     
             ABSOLUTE  MONOCYTES                         730.0                       
             ABSOLUTE  EOSINOPHILS                       50.0                      
             ABSOLUTE  BASOPHILS                         10.0                      
             RBC  COUNT                                  4.31         
             HAEMOGLOBIN   (Hb)                          13.1         
             P.C.V/HCT                                   41.2         
             MCV                                         95.5         
             MCH                                         30.3         
             MCHC                                        31.8         
             RDW  / SD                                   49.7         
             RDW  / CV                                   12.3         
             PLATELET  COUNT                             148000       
             PDW                                         17.0         
             MPV                                         13.3         
             PCT                                         0.198        


Tags: 文件数据namedatecountflrdwabsolute
2条回答

这种数据很难用正则表达式解析,但您可以尝试使用这种数据(可能需要为其他文本文件进行调整)(regex101):

import re

# variable `txt` is your text file from question
for col1, col2 in re.findall(r'^\s{13}([A-Z.]{2}[^\n\d]*[A-Z)])(?:\s*([\d.]+)|[^$])', txt, flags=re.MULTILINE):
    print('{:<50}{}'.format(col1, col2))

印刷品:

TOTAL LEUCOCYTES    COUNT (TLC)                   23160
DIFFERENTIAL LEUCOCYTES  COUNT (DLC)              
NEUTROPHILS                                       93.4
LYMPHOCYTES                                       3.3
MONOCYTES                                         3.1
EOSINOPHILS                                       0.2
BASOPHILS                                         0.0
ABSOLUTE   NEUTROPHILS                            21620.0
ABSOLUTE   LYMPHOCYTES                            750.0
ABSOLUTE  MONOCYTES                               730.0
ABSOLUTE  EOSINOPHILS                             50.0
ABSOLUTE  BASOPHILS                               10.0
RBC  COUNT                                        4.31
HAEMOGLOBIN   (Hb)                                13.1
P.C.V/HCT                                         41.2
MCV                                               95.5
MCH                                               30.3
MCHC                                              31.8
RDW  / SD                                         49.7
RDW  / CV                                         12.3
PLATELET  COUNT                                   148000
PDW                                               17.0
MPV                                               13.3
PCT                                               0.198

您可以使用python regex library来实现您想要的。 我开始为你的问题编写正则表达式,但没有完成。当我到达令人满意的地方时,我会更新我的帖子

目前,正则表达式正在匹配每行的第一列和第二列,每行以空白字符开头,有第一个字母数字列和第二个数字列。我们需要在只有一列的行上添加匹配项

^\s+([[a-zA-Z()\/. ]+)\s+(\d+.\d+)

您可以在regex101.com上轻松地编写和测试正则表达式,它允许您轻松地可视化正则表达式在调试它们时所做的工作

[编辑]

这一个应该可以做到这一点,但是在通过正则表达式之前,需要清理一下输入字符串。假设titleCOMPLETE BLOOD COUNT (CBC)始终存在,您可以调用pythonfind函数并删除前面的字符

(^\s+([[a-zA-Z()\/. ]+)\s+((\d+.\d+)))|(^\s+(([[a-zA-Z()\/. ]+))\s+\R)

相关问题 更多 >

    热门问题