首页 > 解决方案 > 正则表达式 python 的输出

问题描述

我有这个数据:结果=

Operator       #Hosts   Avg Time   Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail
--------------------------------------------------------------------------------------------------------------
01:EXCHANGE         1  136.668ms  136.668ms   1.02K          -1         0              0  UNPARTITIONED
00:SCAN HDFS        1  115.097ms  115.097ms  36.86K          -1  99.97 MB      960.00 MB  edw.dw_loan_int_amt

我想出了这个正则表达式 (r". ?([0-9]+.[0-9]+\ .B). ?[0-9]+.[0-9]+\ .?B.* ) 从“Peak Mem”获取我需要的信息,在这种情况下输出为 99.97MB

我想做什么:如果结果> 90 MB然后#do这个

任何帮助表示赞赏。

这是我到目前为止所拥有的,但我得到:无

result = sum_data['summary']
    print result
    m = re.match(r".*?([0-9]+\.[0-9]+\ .B).*?[0-9]+\.[0-9]+\ .?B.*", result)
    print m

标签: regexpython-2.7

解决方案


您可以将它分成几行,然后使用简单的正则表达式\s{2,}(意味着至少两个空格,可能更多)。


Python

import re

data = """
Operator       #Hosts   Avg Time   Max Time   #Rows  Est. #Rows  Peak Mem  Est. Peak Mem  Detail
--------------------------------------------------------------------------------------------------------------
01:EXCHANGE         1  136.668ms  136.668ms   1.02K          -1         0              0  UNPARTITIONED
00:SCAN HDFS        1  115.097ms  115.097ms  36.86K          -1  99.97 MB      960.00 MB  edw.dw_loan_int_amt
"""

rx = re.compile(r'\s{2,}')

for line in data.split('\n'):
    parts = rx.split(line)
    if len(parts) > 2:
        print(parts[6])


这产生

Peak Mem
0
99.97 MB

或者 - 如果您更喜欢列表理解:

memory_peaks = [parts[6] 
                for line in data.split('\n')
                for parts in [rx.split(line)]
                if len(parts) > 2]

print(memory_peaks)

推荐阅读