regex 如何在python中正确编写正则表达式[duplicate]

3gtaxfhh  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(92)
    • 此问题在此处已有答案**:

(9个答案)
3天前关闭。
我需要在以下文本中从日志中查找威胁ID

C:\\Users\\Administrator\\Downloads\\CallbackHell.exe}\r\nThreatID                       : 2147725414\r\nThreatStatusErrorCode          : 0\r\nThreatStatusID                 : 3\r\nPSComputerName                 : \r\n\r\nActionSuccess                  : True\r\nAdditionalActionsBitMask       : 0\r\nAMProductVersion               : 4.18.2211.5\r\nCleaningActionID               : 2\r\nCurrentThreatExecutionStatusID : 1\r\nDetectionID                    : {F9B830AE-D82E-4248-9D9D-723F2FB3AF95}\r\nDetectionSourceTypeID          : 3\r\nDomainUser                     : WIN-LIVFRVQFMKO\\Administrator\r\nInitialDetectionTime           : 1/9/2023 6:43:30 PM\r\nLastThreatStatusChangeTime     : 1/9/2023 6:43:59 PM\r\nProcessName                    : C:\\Windows\\explorer.exe\r\nRemediationTime                : 1/9/2023 6:43:59 PM\r\nResources                      : {file:_C:\\Users\\Administrator\\Desktop\\CallbackHell.exe:3\r\nPSComputerName                 : \r\n\r\nActionSuccess                  : True\r\nAdditionalActionsBitMask       : 0\r\nAMProductVersion               : 4.18.2211.5\r\nCleaningActionID               : 2\r\nCurrentThreatExecutionStatusID : 1\r\nDetectionID                    : {F9B830AE-D82E-4248-9D9D-723F2FB3AF95}\r\nDetectionSourceTypeID          : 3\r\nDomainUser                     : WIN-LIVFRVQFMKO\\Administrator\r\nInitialDetectionTime           : 1/9/2023 6:43:30 PM\r\nLastThreatStatusChangeTime     : 1/9/2023 6:43:59 PM\r\nProcessName                    : C:\\Windows\\explorer.exe\r\nRemediationTime                : 1/9/2023 6:43:59 PM\r\nResources                      : {file:_C:\\Users\\Administrator\\Desktop\\CallbackHell.exe}\r\nThreatID                       : 2147725414\r\nThreatStatusErrorCode          : 0\r\nThreatStatusID                 : 3,

我将表达式写为

ThreatStatusID                 : (.*)\\r\\nPSComputerName

但不知为何它不起作用

我在这里看到一个错误
我错在哪里?
我的密码是

try:
        re_filename_pattern = re.compile(r'\{file:_(.*)}')
        mo = re_filename_pattern.search(str(output))
        re_filename_pattern2 = re.compile(r'ThreatStatusID                 : (.*)\\r\\nPS')
        mo2 = re_filename_pattern2.search(str(output))
        if mo2 is not None and mo is not None:
            log += (mo.group(1)) + ":" + (mo2.group(1)) + ", "
    except:
        print('cant get filename')
yeotifhr

yeotifhr1#

您可能忽略了.*是贪婪的这一事实:*将匹配 * 所有 * 字符,直到无法再匹配为止。因此,它仅在 * 最后 * \r\nPS处停止匹配,而不是在第一个\r\nPS处停止匹配(因为.*还匹配所有其他\r\nPS)。
您可以尝试使用.*?来使用*的非贪婪副本。另请参阅文档(搜索?)。
例如

re_filename_pattern2 = re.compile(r'ThreatStatusID\s+: (.*?)\\r\\nPS')

\s+散布在其中,因为所有这些空格使模式难以(太长)阅读。)

相关问题