Regex 正则表达式匹配命令行输出
我试图解析Windows命令提示符命令的输出,该命令获取进程的子进程的标题和ProcessId。该命令以以下格式返回输出:Regex 正则表达式匹配命令行输出,regex,Regex,我试图解析Windows命令提示符命令的输出,该命令获取进程的子进程的标题和ProcessId。该命令以以下格式返回输出: Caption ProcessId\r\r\nnotepad++.exe 40000 \r\r\nnfilezilla.exe 90000 \r\r\n\r\r\n 我尝试使用的正则表达式是: Caption\s*ProcessId((?:\r\r\n)([a-zA-z\W]+.exe)\s*(\d+)\s*)* 以下是我试图做的: 匹配输出的开头标题进程ID 捕获
Caption ProcessId\r\r\nnotepad++.exe 40000 \r\r\nnfilezilla.exe 90000 \r\r\n\r\r\n
我尝试使用的正则表达式是:
Caption\s*ProcessId((?:\r\r\n)([a-zA-z\W]+.exe)\s*(\d+)\s*)*
以下是我试图做的:
标题进程ID
\r
和单回车符
进程信息前面的换行符\n
标题ProcessId
,似乎无法匹配回车符和换行符
如何修改正则表达式以成功匹配示例输出
((?:\\r\\r\\n)([a-zA-z\W]+.exe)\s*(\d+)\s*)
你能试试这个吗?您没有用一个反斜杠转义\r
和\n
字符。您可以将此正则表达式与迭代一起用于获取所有进程
你能试试这个吗?您没有用一个反斜杠转义\r
和\n
字符。您可以将此正则表达式与迭代一起用于获取所有进程
如果您有与PCRE兼容的正则表达式,您可以使用
\G
重置比赛的开始。您也可以使用\s
来匹配\r
和\n
字符。试试这个:
(?:^Caption\s*ProcessId|\G)((?:\s*)([a-zA-z\W]+.exe)\s*(\d+))
标题在组2中,进程ID在组3中
如果您有与PCRE兼容的正则表达式,您可以使用
\G
重置比赛的开始。您也可以使用\s
来匹配\r
和\n
字符。试试这个:
(?:^Caption\s*ProcessId|\G)((?:\s*)([a-zA-z\W]+.exe)\s*(\d+))
标题在组2中,进程ID在组3中
如果要按字面意思匹配该字符串,则必须像
\\r
那样转义反斜杠以匹配\r
要匹配Caption ProcessId
并在第一个捕获组中捕获流程的标题,以及在第二个捕获组中匹配流程,您可以使用一个替代选项:
^Caption\s*ProcessId |\\r\\r\\n(\s+)\s+(\d+)
这将符合:
断言字符串的开头^
MatchCaption\s*ProcessId
Caption-ProcessId
或|
匹配\\r\\r\\n(\S+)\S+(\d+)
。然后在组中捕获1+次非空白字符\r\r\n
,然后在组中捕获1+次空白字符(\S+)
,然后在组中捕获1+位\S+
(\d+)
如果进程的标题应以.exe结尾,则可以将
(\S+)
更改为(\S+\.exe)
如果要逐字匹配该字符串,则必须像\\r
那样转义反斜杠以匹配\r
要匹配Caption ProcessId
并在第一个捕获组中捕获流程的标题,以及在第二个捕获组中匹配流程,您可以使用一个替代选项:
^Caption\s*ProcessId |\\r\\r\\n(\s+)\s+(\d+)
这将符合:
断言字符串的开头^
MatchCaption\s*ProcessId
Caption-ProcessId
或|
匹配\\r\\r\\n(\S+)\S+(\d+)
。然后在组中捕获1+次非空白字符\r\r\n
,然后在组中捕获1+次空白字符(\S+)
,然后在组中捕获1+位\S+
(\d+)
如果进程的标题应以.exe结尾,则可以将
(\S+)
更改为(\S+\.exe)
是否确实提供了有效的regex(regex101链接)?看起来它们并不相似。@Ekrem很好,我刚刚修复了它cmd
标记与Microsoft Windows cmd.exe相关。如果这与Windows无关,请删除cmd
标记。是否确定提供了有效的正则表达式(regex101链接)?看起来它们并不相似。@Ekrem很好,我刚刚修复了它cmd
标记与Microsoft Windows cmd.exe相关。如果这不是关于Windows的,请删除cmd
标记。我尝试了一些调整,比如删除了包装表达式其余部分的第一个捕获组,这正是我想要的。我尝试了一些调整,比如删除了包装表达式其余部分的第一个捕获组,这正是我想要的汉克斯的解释谢谢你的解释