[效率提升] 记一次使用工具编辑正则表达式快速输出匹配结果
最近在使用python编写统计 android设备应用的帧率(FPS),通过adb shell dumpsys gfxinfo (packagename) 获取到数据后,如何对所有 Profile data in ms值进行提取,最先想到的肯定是要用正则表达式才能快速提取出想要的内容,具体要提取内容如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 Applications Graphics Acceleration Info: 2 Uptime: 31994594 Realtime: 103860953 3 4 ** Graphics info for pid 1499 [com.google.launcher] ** 5 6 Stats since: 16212900501273ns 7 Total frames rendered: 37545 8 Janky frames: 18745 (49.93%) 9 50th percentile: 17ms 10 90th percentile: 28ms 11 95th percentile: 36ms 12 99th percentile: 61ms 13 Number Missed Vsync: 1209 14 Number High input latency: 545 15 Number Slow UI thread: 3348 16 Number Slow bitmap uploads: 32 17 Number Slow issue draw commands: 17592 18 HISTOGRAM: 5ms=4 6ms=102 7ms=254 8ms=1477 9ms=5596 10ms=5048 11ms=2306 12ms=985 13ms=624 14ms=604 15ms=583 16ms=938 17ms=1427 18ms=3251 19ms=4266 20ms=1897 21ms=1385 22ms=867 23ms=536 24ms=428 25ms=404 26ms=337 27ms=355 28ms=360 29ms=340 30ms=307 31ms=269 32ms=356 34ms=268 36ms=230 38ms=197 40ms=143 42ms=106 44ms=61 46ms=69 48ms=151 53ms=343 57ms=295 61ms=95 65ms=61 69ms=64 73ms=65 77ms=19 81ms=12 85ms=8 89ms=10 93ms=4 97ms=11 101ms=1 105ms=2 109ms=2 113ms=1 117ms=2 121ms=2 125ms=1 129ms=2 133ms=0 150ms=6 200ms=2 250ms=1 300ms=2 350ms=1 400ms=0 450ms=0 500ms=0 550ms=0 600ms=1 650ms=0 700ms=0 750ms=0 800ms=1 850ms=0 900ms=0 950ms=0 1000ms=0 1050ms=0 1100ms=0 1150ms=0 1200ms=0 1250ms=0 1300ms=0 1350ms=0 1400ms=0 1450ms=0 1500ms=0 1550ms=0 1600ms=0 1650ms=0 1700ms=0 1750ms=0 1800ms=0 1850ms=0 1900ms=0 1950ms=0 2000ms=0 2050ms=0 2100ms=0 2150ms=0 2200ms=0 2250ms=0 2300ms=0 2350ms=0 2400ms=0 2450ms=0 2500ms=0 2550ms=0 2600ms=0 2650ms=0 2700ms=0 2750ms=0 2800ms=0 2850ms=0 2900ms=0 2950ms=0 3000ms=0 3050ms=0 3100ms=0 3150ms=0 3200ms=0 3250ms=0 3300ms=0 3350ms=0 3400ms=0 3450ms=0 3500ms=0 3550ms=0 3600ms=0 3650ms=0 3700ms=0 3750ms=0 3800ms=0 3850ms=0 3900ms=0 3950ms=0 4000ms=0 4050ms=0 4100ms=0 4150ms=0 4200ms=0 4250ms=0 4300ms=0 4350ms=0 4400ms=0 4450ms=0 4500ms=0 4550ms=0 4600ms=0 4650ms=0 4700ms=0 4750ms=0 4800ms=0 4850ms=0 4900ms=0 4950ms=0 19 Caches: 20 Current memory usage / total memory usage (bytes): 21 TextureCache 896926 / 24576000 22 Layers total 0 (numLayers = 0) 23 RenderBufferCache 0 / 2048000 24 GradientCache 32768 / 1048576 25 PathCache 2696 / 4096000 26 TessellationCache 816 / 1048576 27 TextDropShadowCache 12224 / 2048000 28 PatchCache 448 / 131072 29 FontRenderer A8 10407 / 409600 30 A8 texture 0 10407 / 409600 31 FontRenderer RGBA 0 / 0 32 FontRenderer total 10407 / 409600 33 Other: 34 FboCache 0 / 0 35 Total memory usage: 36 1355478 bytes, 1.29 MB 37 38 39 Pipeline=FrameBuilder 40 Profile data in ms: 41 42 com.android.launcher3/com.google.launcher.Launcher/android.view.V5ba3 (visibility=0) 43 Draw Prepare Process Execute 44 1.96 0.41 5.82 2.01 45 1.82 0.34 5.11 2.30 46 3.35 0.34 4.76 2.06 47 2.54 0.36 5.01 2.09 48 2.00 0.36 5.73 2.06 49 2.17 0.43 5.46 1.95 50 1.92 0.35 5.19 2.38 51 1.99 0.36 5.67 2.09 52 2.03 0.41 5.37 2.08 53 1.88 0.37 5.66 2.05 54 2.16 0.36 5.14 2.09 55 1.90 0.37 5.75 2.18 56 1.99 0.42 5.56 2.04 57 1.93 0.40 5.14 2.36 58 1.97 0.36 5.47 2.13 59 1.85 0.44 5.18 2.16 60 1.99 0.35 5.29 2.12 61 2.21 0.36 5.24 2.06 62 1.91 0.36 5.42 2.16 63 1.93 0.40 5.79 2.22 64 1.96 0.36 5.38 2.59 65 1.95 0.41 5.66 2.05 66 2.01 0.36 5.23 2.05 67 1.93 0.36 5.65 2.02 68 2.09 0.38 5.38 2.04 69 1.96 0.36 5.56 2.19 70 2.08 0.39 5.36 2.13 71 1.90 0.36 5.46 2.54 72 1.98 0.35 5.63 2.11 73 1.93 0.35 5.20 2.17 74 1.91 0.36 5.74 2.06 75 2.77 1.04 4.37 2.03 76 1.95 0.36 5.39 2.31 77 1.86 0.37 5.52 2.17 78 1.95 0.37 5.23 2.34 79 2.02 0.36 5.48 2.07 80 1.95 0.36 5.39 2.07 81 2.02 0.36 5.47 2.03 82 3.77 0.34 4.66 2.04 83 1.91 0.36 5.50 2.25 84 2.02 0.46 5.55 2.06 85 1.94 0.37 5.30 2.40 86 2.01 0.36 5.57 2.11 87 2.02 0.36 5.23 2.09 88 2.03 0.35 5.40 2.04 89 2.08 0.36 5.07 2.12 90 1.91 0.35 5.19 2.36 91 1.81 0.37 5.49 2.14 92 2.00 0.36 5.02 2.42 93 2.05 0.35 5.61 2.06 94 1.97 0.36 5.29 2.12 95 1.93 0.36 5.50 2.07 96 2.07 0.37 5.42 2.11 97 1.93 0.41 5.53 2.21 98 3.68 0.36 4.67 1.93 99 1.96 0.37 5.35 2.14 100 2.00 0.36 5.68 2.01 101 1.87 0.37 5.49 3.59 102 1.95 0.36 5.68 2.11 103 2.03 0.44 5.37 2.15 104 2.01 0.36 5.25 2.56 105 2.05 0.36 5.45 2.07 106 2.03 0.35 5.22 2.35 107 1.94 0.36 5.64 2.09 108 1.92 0.36 5.12 2.04 109 1.92 0.44 5.29 2.22 110 2.13 0.37 5.38 2.12 111 2.02 0.36 5.28 2.21 112 2.10 0.37 5.94 1.96 113 1.93 0.37 5.39 2.24 114 1.99 0.35 5.64 2.09 115 3.50 0.33 4.54 2.03 116 1.97 0.37 5.57 2.17 117 2.11 0.38 5.36 2.13 118 1.95 0.36 5.11 2.29 119 1.99 0.37 5.58 2.05 120 3.52 0.33 4.73 2.52 121 1.87 0.37 5.74 2.12 122 1.93 0.41 5.20 2.19 123 1.99 0.35 5.42 2.14 124 2.43 0.97 4.51 2.09 125 1.95 0.36 5.33 2.21 126 2.14 0.37 5.70 2.14 127 1.93 0.36 5.51 2.21 128 1.97 0.46 5.51 2.05 129 2.34 0.99 4.48 2.12 130 1.99 0.36 5.38 2.12 131 2.18 1.04 4.53 2.03 132 1.96 0.36 5.33 2.37 133 1.94 0.40 5.60 2.11 134 1.93 0.36 5.27 2.30 135 1.92 0.40 5.46 2.16 136 2.03 0.36 5.17 2.31 137 1.89 0.36 5.66 2.06 138 2.18 0.39 5.31 2.03 139 1.87 0.37 5.26 2.33 140 1.92 0.36 5.95 2.04 141 1.84 0.40 5.31 2.24 142 2.04 0.36 5.50 2.14 143 1.96 0.37 5.37 2.03 144 2.02 0.36 5.73 2.02 145 2.11 0.42 5.44 1.92 146 1.89 0.35 5.11 2.39 147 1.91 0.46 5.83 2.12 148 1.99 0.36 4.95 2.17 149 2.00 0.35 5.17 2.34 150 2.17 0.41 5.42 2.02 151 1.89 0.37 7.14 2.10 152 1.97 0.41 6.70 2.05 153 1.90 0.37 5.33 2.47 154 1.86 0.42 5.90 2.07 155 2.04 0.36 5.10 2.07 156 1.96 0.37 6.45 2.35 157 2.06 0.36 5.45 2.02 158 2.03 0.36 5.48 2.15 159 2.00 0.40 5.88 2.85 160 1.95 0.46 5.59 2.52 161 2.12 0.42 6.32 2.25 162 1.96 0.35 5.28 2.42 163 2.57 0.98 4.98 2.31 164 165 View hierarchy: 166 167 com.google.launcher3/com.google.launcher.Launcher/android.view.ViewRootImpl@a8f5ba3 168 98 views, 122.13 kB of display lists 169 170 171 Total ViewRootImpl: 1 172 Total Views: 98 173 Total DisplayList: 122.13 kB
把第44行至163行的 (Draw,Prepare,Process,Execute)值全部提取出来。
下面讲解不使用工具和使用工具的操作步骤,大家一起评一评哪个效率更好些(当然了,如果是眯着眼睛都能知道正则表达式输出结果的非常牛逼的人可以忽略此):
不使用工具:
1 先是按照自己的思路大概将表达式写好,然后再执行一下代码查看结果是否是需要所要的; 2 3 while 结果不对: 4 继续调整正则表达式 5 if 运行代码: 6 结果是自己想要的同时返回结果 7 break 8 else: 9 结果不对,从头执行
对于掌握正则表达式一般般的人来说,反正就是反复调整表达式-->反复运行代码-->反复检查结果-->再又返回调整表达式,陷入了死循环了
使用工具(RegexBuddy):
先直接给出工具的界面,并在每一处需要手动处理的地方添加了备注,这个工具的好处就是在正则表达式区域输入匹配语句后,在右下 角区域能立即显示出匹配的效果,如果所要匹配的内容匹配上后,会按照颜色标注进行区分,所以这样就可以大胆的在编辑区域进行调整表达式,只要在右下角显示区域匹配成功后,即可将表达式拷出来放到 python 代码中运行。