首页 > 解决方案 > Python findall \n 与正则表达式

问题描述

试图让所有组

76630000 76746000 ucrtbase
76750000 76764000 profapi
...

从字符串loaded_modules_raw

'start end module name\n76630000 76746000 ucrtbase (deferred) \n76750000 76764000 profapi (deferred) \n76770000 76840000 KERNEL32 (deferred) \n76840000 768bc000 msvcp_win (deferred) \n768c0000 76903000 sechost (deferred) \n76920000 76af8000 KERNELBASE (deferred) \n77090000 770d5000 SHLWAPI (deferred) \n770e0000 776a7000 windows_storage (deferred) \n776b0000 776d2000 GDI32 (deferred) \n776e0000 77758000 ADVAPI32 (deferred) \n777c0000 7787d000 msvcrt (deferred) \n77880000 77896000 win32u (deferred) \n778a0000 77928000 shcore (deferred) \n77940000 77965000 IMM32 (延迟)\n779c0000 77b4c000 ntdll(pdb 符号)D:\NG\bin\Debug\wntdll.pdb\E04B114840C9B587E2E333AED97D8C9A1\wntdll.pdb\n\n卸载的模块:\n76910000 76916000 psapi.dll\n'

loaded_modules = re.findall(r"\\n(\w+)\s(\w+)\s+(\w+)",loaded_modules_raw)

试过了re.DOTALL

结果我得到None为什么?

标签: python

解决方案


正则表达式101

s = '''start    end        module name\n76630000 76746000   ucrtbase   (deferred)             \n76750000 76764000   profapi    (deferred)             \n76770000 76840000   KERNEL32   (deferred)             \n76840000 768bc000   msvcp_win   (deferred)             \n768c0000 76903000   sechost    (deferred)             \n76920000 76af8000   KERNELBASE   (deferred)             \n77090000 770d5000   SHLWAPI    (deferred)             \n770e0000 776a7000   windows_storage   (deferred)             \n776b0000 776d2000   GDI32      (deferred)             \n776e0000 77758000   ADVAPI32   (deferred)             \n777c0000 7787d000   msvcrt     (deferred)             \n77880000 77896000   win32u     (deferred)             \n778a0000 77928000   shcore     (deferred)             \n77940000 77965000   IMM32      (deferred)             \n779c0000 77b4c000   ntdll      (pdb symbols)          D:\\NG\\bin\\Debug\\wntdll.pdb\\E04B114840C9B587E2E333AED97D8C9A1\\wntdll.pdb\n\nUnloaded modules:\n76910000 76916000   psapi.dll\n'''

import re

g = re.findall(r"^([0-9a-f]+)\s+([0-9a-f]+)\s+([\w.]+)", s, flags=re.M)

for start, end, module_name in g:
    print('{:<15} {:<15} {:<15}'.format(start, end, module_name))

印刷:

76630000        76746000        ucrtbase       
76750000        76764000        profapi        
76770000        76840000        KERNEL32       
76840000        768bc000        msvcp_win      
768c0000        76903000        sechost        
76920000        76af8000        KERNELBASE     
77090000        770d5000        SHLWAPI        
770e0000        776a7000        windows_storage
776b0000        776d2000        GDI32          
776e0000        77758000        ADVAPI32       
777c0000        7787d000        msvcrt         
77880000        77896000        win32u         
778a0000        77928000        shcore         
77940000        77965000        IMM32          
779c0000        77b4c000        ntdll          
76910000        76916000        psapi.dll      

推荐阅读