regex - 正则表达式 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
解决方案
您可以将它分成几行,然后使用简单的正则表达式\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)
推荐阅读
- typescript - 从键的联合创建对象类型
- java - 如何从mysql数据库中创建和访问项目行的arraylist(在java中)?
- dart - 如何仅在按下按钮时调用方法?
- css - 有一个滚动条,但没有什么可看的
- php - Laravel 服务容器 - 注册一个共享给所有服务的对象
- mysql - 不显示表格行
- r - 如何索引列表的第一个元素,并将其应用于 R 中数据帧的每一行?
- c - 为什么链表不在主函数中打印?
- ios - 从(英语到阿拉伯语)更改语言时如何从左到右更改 SWRaveal 侧菜单表单
- tabs - 即使在 Visual Studio 2017 中取消注释后,如何保持制表符缩进?