簡體   English   中英

如何為 Python 中的表數據制作正則表達式

[英]How to make a regex for table data in Python

我有一個文件,它是一個.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 


_ 

我只想從中獲得前兩列

output 我想要(測試名稱,值):

             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        

這種數據很難用正則表達式解析,但你可以試試這個(可能需要針對其他文本文件進行調整)( 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 正則表達式庫來實現您想要的。 我開始為您的問題編寫一個正則表達式,但沒有完成。 當我到達令人滿意的地方時,我會更新我的帖子。

目前,正則表達式匹配以空白字符開頭的每一行的第一列和第二列,具有第一個字母數字列和第二個數字列。 我們需要在只有一列的行上添加匹配項。

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

您可以在regex101.com上輕松編寫和測試您的正則表達式,它使您可以輕松地可視化他們正在做什么來調試它們。

[編輯]

這個應該可以解決問題,但是您需要在通過正則表達式之前清理一下輸入字符串。 假設標題COMPLETE BLOOD COUNT (CBC)會一直存在,你可以撥打 python find function 並刪除前面的字符。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM