我正在尝试解析Windows命令提示符命令的输出,该命令获取进程的子进程的Caption和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*)*
这就是我想要做的:
Caption ProcessId
的开始\r
和单个
流程信息之前的换行符\n
。我一直在使用https://regex101.com/r/Zqo6FW/47和上面使用的正则表达式和示例字符串。这样做,我只匹配Caption ProcessId
,但似乎无法匹配回车符和换行符。
如何修改正则表达式以成功匹配示例输出?
答案 0 :(得分:2)
((?:\\r\\r\\n)([a-zA-z\W]+.exe)\s*(\d+)\s*)
您可以尝试一下吗?您没有使用另外一个反斜杠转义\r
和\n
字符。您可以将此正则表达式与迭代结合使用以获取所有进程。
答案 1 :(得分:1)
如果您具有PCRE兼容的正则表达式,则可以使用\G
重设比赛的开始。您也可以只使用\s
来匹配\r
和\n
字符。试试这个:
(?:^Caption\s*ProcessId|\G)((?:\s*)([a-zA-z\W]+.exe)\s*(\d+))
标题在组2中,ProcessID在组3中。
答案 2 :(得分:1)
如果您想按字面意义匹配该字符串,则必须转义像\\r
这样的反斜杠才能匹配\r
要匹配Caption ProcessId
并在第一个捕获组中捕获过程的标题,并在第二个捕获组中匹配过程,您可以使用交替显示:
^Caption\s*ProcessId|\\r\\r\\n(\S+)\s+(\d+)
这将匹配:
^
断言字符串的开头Caption\s*ProcessId
匹配Caption ProcessId
|
或\\r\\r\\n(\S+)\s+(\d+)
匹配\r\r\n
。然后以1+次而不是空白字符(\S+)
的组捕获,然后以1+倍的空白字符\s+
捕获,然后以1+个数字组(\d+)
捕获如果进程的标题应以.exe结尾,则可以将(\S+)
更改为(\S+\.exe)