免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2185 | 回复: 4
打印 上一主题 下一主题

[其他] python 正则 多行 非贪婪匹配 (求助) [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:51:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-12-12 15:38 |只看该作者 |倒序浏览
本帖最后由 qimuzhi 于 2017-12-12 15:51 编辑

请教下:
下文测试代码中, 我多行匹配, 但是匹配到的结果有错误.(用红字标出)
我只想要Total PSS by category:下面几行的内容.

代码复制粘贴可执行.看着长, 因为测试字符串长.

因为有干扰项, 我没办法排除, 请赐教!


  1. import re

  2. import logging
  3. import csv

  4. log_level = logging.WARNING
  5. # log_level = logging.INFO
  6. log_level = logging.NOTSET
  7. logging.basicConfig(format='%(asctime)s %(message)s',level=log_level)

  8. test_str = '''
  9. Total PSS by OOM adjustment:
  10.     503,841K: Native

  11. Total PSS by category:
  12.     366,458K: Native
  13.     254,224K: .dex mmap
  14.     156,044K: .so mmap
  15.      97,988K: Dalvik
  16.      97,829K: .apk mmap
  17.      83,928K: GL mtrack
  18.      66,618K: .oat mmap
  19.      56,504K: .art mmap
  20.      55,068K: EGL mtrack
  21.      49,107K: Unknown
  22.      33,957K: Dalvik Other
  23.      20,235K: Stack
  24.      15,188K: Gfx dev
  25.      14,354K: Other mmap
  26.       3,805K: .ttf mmap
  27.       1,519K: Other dev
  28.       1,236K: Ashmem
  29.         382K: .jar mmap
  30.           0K: Cursor
  31.           0K: Other mtrack

  32. Total RAM: 2,837,896K (status normal)
  33. Free RAM:   945,990K (   86,006K cached pss +   609,816K cached kernel +   250,168K free)
  34. Used RAM: 1,707,024K (1,390,932K used pss +   316,092K kernel)
  35. Lost RAM:   143,483K
  36.      ZRAM:    44,524K physical used for   123,176K in swap (  786,428K total swap)

  37. Total PSS by OOM adjustment:
  38.     472,309K: Native

  39. Total PSS by category:
  40.     350,803K: Native
  41.     284,120K: .dex mmap
  42.     154,923K: .so mmap
  43.     132,952K: GL mtrack
  44.     109,226K: .apk mmap
  45.     109,194K: Dalvik
  46.      66,826K: .oat mmap
  47.      57,492K: .art mmap
  48.      55,068K: EGL mtrack
  49.      52,817K: Unknown
  50.      35,966K: Dalvik Other
  51.      20,268K: Stack
  52.      14,475K: Other mmap
  53.      13,752K: Gfx dev
  54.       3,790K: .ttf mmap
  55.       1,509K: Other dev
  56.       1,360K: Ashmem
  57.         361K: .jar mmap
  58.           0K: Cursor
  59.           0K: Other mtrack

  60. Total RAM: 2,837,896K (status normal)
  61. Free RAM:   946,064K (  140,720K cached pss +   723,396K cached kernel +    81,948K free)
  62. Used RAM: 1,741,513K (1,428,733K used pss +   312,780K kernel)
  63. Lost RAM:   111,666K
  64.      ZRAM:    44,524K physical used for   123,160K in swap (  786,428K total swap)
  65. '''


  66. def get_RAM(match_str):
  67.     pattern = re.compile(r'%s *([0-9,]*)K' % match_str)
  68.     ram_kb = pattern.findall((test_str).replace(",", ""))
  69.     logging.warning("%s: %s" % (match_str, ram_kb))
  70.     return ram_kb


  71. def get_pss_by_category(match_str):
  72.     pattern = re.compile(r' *([0-9,]*)K%s' % match_str)
  73.     ram_kb = pattern.findall((test_str).replace(",", ""))
  74.     logging.warning("%s: %s" % (match_str, ram_kb))
  75.     return ram_kb

  76. def get_dumpsys_meminfo():
  77.     li_ram_name = [
  78.         "Total RAM:",
  79.         "Free RAM:",
  80.         "Used RAM:",
  81.         "Lost RAM:"
  82.     ]

  83.     li_pss_category_name = [
  84.         ": Native",
  85.         ": .dex mmap",
  86.         ": .so mmap",
  87.         ": GL mtrack",
  88.         ": Dalvik",
  89.         ": .apk mmap",
  90.         ": .oat mmap",
  91.         ": .art mmap",
  92.         ": EGL mtrack",
  93.         ": Unknown",
  94.         ": Dalvik Other",
  95.         ": Stack",
  96.         ": Other mmap",
  97.         ": Gfx dev",
  98.         ": .ttf mmap",
  99.         ": Other dev",
  100.         ": Ashmem",
  101.         ": .jar mmap"
  102.     ]

  103.     for index, str in enumerate(li_ram_name):
  104.         data = get_RAM(str)

  105.     for index, str in enumerate(li_pss_category_name):
  106.         data = get_pss_by_category(str)

  107. get_dumpsys_meminfo()
复制代码



测试结果:

2017-12-12 15:36:52,118 Total RAM:: ['2837896', '2837896']
2017-12-12 15:36:52,118 Free RAM:: ['945990', '946064']
2017-12-12 15:36:52,118 Used RAM:: ['1707024', '1741513']
2017-12-12 15:36:52,119 Lost RAM:: ['143483', '111666']
2017-12-12 15:36:52,119 : Native: ['503841', '366458', '472309', '350803']
2017-12-12 15:36:52,119 : .dex mmap: ['254224', '284120']
2017-12-12 15:36:52,120 : .so mmap: ['156044', '154923']
2017-12-12 15:36:52,120 : GL mtrack: ['83928', '132952']
2017-12-12 15:36:52,120 : Dalvik: ['97988', '33957', '109194', '35966']
2017-12-12 15:36:52,121 : .apk mmap: ['97829', '109226']
2017-12-12 15:36:52,121 : .oat mmap: ['66618', '66826']
2017-12-12 15:36:52,122 : .art mmap: ['56504', '57492']
2017-12-12 15:36:52,122 : EGL mtrack: ['55068', '55068']
2017-12-12 15:36:52,122 : Unknown: ['49107', '52817']
2017-12-12 15:36:52,123 : Dalvik Other: ['33957', '35966']
2017-12-12 15:36:52,123 : Stack: ['20235', '20268']
2017-12-12 15:36:52,124 : Other mmap: ['14354', '14475']
2017-12-12 15:36:52,124 : Gfx dev: ['15188', '13752']
2017-12-12 15:36:52,124 : .ttf mmap: ['3805', '3790']
2017-12-12 15:36:52,125 : Other dev: ['1519', '1509']
2017-12-12 15:36:52,125 : Ashmem: ['1236', '1360']
2017-12-12 15:36:52,125 : .jar mmap: ['382', '361']

BRs
Eismog





论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:51:33
2 [报告]
发表于 2017-12-12 16:23 |只看该作者
我实验出来了:

修改下
def get_pss_by_category(match_str):
    pattern = re.compile(r'Total PSS by category:.*?([0-9,]*)K%s\n' % match_str, re.DOTALL)
    ram_kb = pattern.findall((test_str).replace(",", ""))
    logging.warning("%s: %s" % (match_str, ram_kb))
    return ram_kb

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:51:33
3 [报告]
发表于 2017-12-12 16:23 |只看该作者
def get_pss_by_category(match_str):
    pattern = re.compile(r'Total PSS by category:.*?([0-9,]*)K%s\n' % match_str, re.DOTALL)
    ram_kb = pattern.findall((test_str).replace(",", ""))
    logging.warning("%s: %s" % (match_str, ram_kb))
    return ram_kb

论坛徽章:
0
4 [报告]
发表于 2017-12-12 16:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:51:33
5 [报告]
发表于 2017-12-14 10:44 |只看该作者
回复 4# 本友会机友会摄友会

十分感谢您的回复.
您又给我提供了新的只是.
十分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP