要评估的示例输入。
- 我需要从下面的文本中提取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,}
描述由文字字符K
和B
组成的字符串,后面跟有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']