首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用powershell或python中的正则表达式从文本文件中提取KBs。

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

Stack Overflow用户
提问于 2022-01-24 15:57:25
回答 2查看 50关注 0票数 0

要评估的示例输入。

  1. 我需要从下面的文本中找到提取KB数字的方法。在powershell或python.

中使用正则表达式

“未安装%windir%\Microsoft.NET\Framework64\v4.0.30319\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.30319\System.Data.dll版本为4.8.3761.0 %windir%\Microsoft.NET\Framework\v4.0.30319\System%windir%\Microsoft.NET\Framework64\v4.0.30319\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.30319\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.30319\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”%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll版本为4.8.3761.0 \v4.0.30319\System.Data.dll版本为4.8.3761.0#“KB4565588”或KB4565635未安装

EN

回答 2

Stack Overflow用户

发布于 2022-01-24 16:03:11

使用Select-String

代码语言:javascript
复制
$strings = @(
"KB4565628 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
"KB4565628 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
"KB4565628 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
"KB4565588 or KB4565635 is not installed 
%windir%\Microsoft.NET\Framework64\v4.0.30319\System.Data.dll Version is 4.8.3761.0
%windir%\Microsoft.NET\Framework\v4.0.30319\System.Data.dll Version is 4.8.3761.0#"
)

$KBIDs = $strings |Select-String 'KB\d{5,}' -AllMatches |ForEach-Object Matches |ForEach-Object Value

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

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

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

代码语言:javascript
复制
$UniqueKBIDs = $KBIDs |Sort-Object -Unique
票数 3
EN

Stack Overflow用户

发布于 2022-01-24 16:22:40

下面是匹配所有KBs的正则表达式,后面跟着数字(在您提供的文本字符串上进行测试:KB\d* )

示例:

代码语言:javascript
复制
import re


res = re.findall( r'KB\d*', '0#" "KB4565588 or KB4565635 is not installed...')

print(res)

>>> ['KB4565588', 'KB4565635']

因此,如果您只想得到没有"KB“的数字,那么您可以这样做:

代码语言:javascript
复制
filtered_res = [elem[2:] for elem in res]

print(filtered_res)

>>> ['4565588', '4565635']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70836697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档