需要使用powershell或python中的正则表达式从文本文件中提取KB



要评估的示例输入。

  1. 我需要从下面的文本中提取KB数字。在powershell或python中使用正则表达式

";KB4565628未安装%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"KB4565628未安装%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"KB4565628未安装%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"未安装KB4565588或KB4565635%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"未安装KB4565588或KB4565635%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"未安装KB4565588或KB4565635%windir%\Microsoft.NET\Framework64\v4.0.30119\System.Data.dll版本为4.8.3761.0%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0#";"KB4565588或KB4565635未安装

使用Select-String:

$strings = @(
"KB4565628 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
"KB4565628 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
"KB4565628 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%Microsoft.NETFramework64v4.0.30319System.Data.dll Version is 4.8.3761.0
%windir%Microsoft.NETFrameworkv4.0.30319System.Data.dll Version is 4.8.3761.0#"
)
$KBIDs = $strings |Select-String 'KBd{5,}' -AllMatches |ForEach-Object Matches |ForEach-Object Value

正则表达式模式KBd{5,}描述由文字字符KB组成的字符串,后面跟有5个或更多个数字。

因此,$KBIDs现在将包含来自输入字符串的KBXXXXXX标识符。

要删除重复项,请使用Sort-Object -Unique:

$UniqueKBIDs = $KBIDs |Sort-Object -Unique

这里有一个正则表达式,用于匹配所有后面跟着数字的KB(在您提供的文本字符串KBd*上测试

示例:

import re

res = re.findall( r'KBd*', '0#" "KB4565588 or KB4565635 is not installed...')
print(res)
>>> ['KB4565588', 'KB4565635']

所以,如果你只想得到没有";KB";,那么你可以这样做:

filtered_res = [elem[2:] for elem in res]
print(filtered_res)
>>> ['4565588', '4565635']

最新更新