【问题标题】:How to make a regex for table data in Python如何在 Python 中为表数据制作正则表达式
【发布时间】:2020-06-11 14:16:40
【问题描述】:

我有一个 .Txt 文件,我想制作一个可以从中解析某种数据的正则表达式。

我已经尝试过这样做,但我无法得到我想要的东西

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

我在这里添加这些数据,请将其视为 .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        

【问题讨论】:

  • 请查看我的previous answer,以防它对您有所帮助。
  • @manu190466 对此不起作用!
  • 当然,这只是一个起点,你必须适应它。由于字符串相似,所以应该不复杂。

标签: python regex


【解决方案1】:

这种数据很难用正则表达式解析,但你可以试试这个(可能需要针对其他文本文件进行调整)(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

【讨论】:

    【解决方案2】:

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

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

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

    您可以在regex101.com 上轻松编写和测试您的正则表达式,它使您可以轻松地可视化他们正在做什么来调试它们。

    [编辑]

    这个应该可以解决问题,但是您需要在通过正则表达式之前清理一些输入字符串。假设标题COMPLETE BLOOD COUNT (CBC)一直存在,可以调用python的find函数,去掉前面的字符。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2018-03-21
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多