python - 如何使用正则表达式获取字符串及其值

标签 python regex


Name        Miss deks KUMARI                    Booking Date           22/05/2020 
             Gender/Age  male  24 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 

这是一个文本文件,我想使用正则表达式进行这种输出

如果我搜索 NEUTROPHILS,我希望它的值为 93.4

如果我搜索 BASOPHILS,我希望它的值为 0.0,类似这样的值。

只需要前两列,我尝试执行一次正则表达式 ^[^\S\r\n]*(\S+)[^\d\r\n]+(\d+(?:\.\d+)?)[^\d\r\n]*(\d+(?:\.\d+)?)?

但它返回所有

谁能帮我弄到这个

这是我的 list

         `["NEUTROPHILS"                                
         "LYMPHOCYTES"                               
         "MONOCYTES"                                   
         "EOSINOPHILS"                               
         "BASOPHILS"]`             

我想要这样-:

{
 "NEUTROPHILS"  :  93.4                            
 "LYMPHOCYTES"  :  3.3                           
 "MONOCYTES"    :  3.1                             
 "EOSINOPHILS"  :  0.2                         
 "BASOPHILS"    :  0.0 }



最佳答案

您可以使用以下表达式:

\b(?P<key>[A-Z][A-Z ]+)\b(?P<value>\d+(?:\.\d+)?)

然后,我们需要清理键(删除不必要的空格)并考虑一个函数,该函数返回给定键的值。可选:将其全部放在一个类中。也就是说,代码可以是:

import re

class Finder:
    def __init__(self, haystack):
        self.db = self.build_db(haystack)

    def build_db(self, haystack):
        rx = re.compile(r'\b(?P<key>[A-Z][A-Z ]+)\b(?P<value>\d+(?:\.\d+)?)')
        ws = re.compile(r'\s+')

        return {ws.sub(' ', m["key"].strip()): m["value"] for m in rx.finditer(haystack)}

    def find_by_key(self, key):
        try:
            value = self.db[key]
        except KeyError:
            value = None
        return value

    def get_selected(self, lst):
        result = {}
        for key in lst:
            value = self.find_by_key(key)
            if value:
                result[key] = value
        return result

    def get_all(self):
        return self.db

cls = Finder(junk)
dct = cls.get_selected(["NEUTROPHILS", "LYMPHOCYTES", "MONOCYTES", "EOSINOPHILS", "BASOPHILS"])
print(dct)

哪个会产生

{'NEUTROPHILS': '93.4', 'LYMPHOCYTES': '3.3', 
 'MONOCYTES': '3.1', 'EOSINOPHILS': '0.2', 'BASOPHILS': '0.0'}

查看 regex101.com 上表达式的演示.

关于python - 如何使用正则表达式获取字符串及其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62881208/

相关文章:

python - 我可以使用 python 中的 gspread 在 Google 电子表格中写入整行吗?

python - 从复杂对象覆盖 __init__

Python 拆分字符串

arrays - 如何将来自Perl正则表达式的捕获存储到单独的变量中?

javascript - 带有 js 文件可更改名称的 Chrome Blackboxing

python - 从 CSV 文件创建图形并使用 Django 和 Pandas Python 库呈现到浏览器

python - 带有 PR 传感器的 Raspberry PI python 脚本

python - 重命名 pandas 数据框的列名称未按预期工作 - python

regex - 在eclipse中查找并​​替换 "go to nth character position"

regex - pcregrep 一个 wiggle 文件来提取染色体。多行正则表达式搜索