Regex 程序名检测
这是线条的样子:Regex 程序名检测,regex,powershell,Regex,Powershell,这是线条的样子: //| Vegas.c | 我想知道名字,这里是维加斯。c 这适用于PS的正则表达式: $found = $body -match '.+?\s+(\w.+?\.c[\+]+)[\s\|]+' 但是,如果名称不是以a-zA-Z0-9(=\w)开头,而是以~或其他非单词字符开头,该怎么办? 名称的第一个字符必须与空白字符不同,因此我尝试: $found =
//| Vegas.c |
我想知道名字,这里是维加斯。c这适用于PS的正则表达式:
$found = $body -match '.+?\s+(\w.+?\.c[\+]+)[\s\|]+'
但是,如果名称不是以a-zA-Z0-9(=\w)开头,而是以~或其他非单词字符开头,该怎么办?名称的第一个字符必须与空白字符不同,因此我尝试:
$found = $body -match '.+?\s+(\S+.+?\.c[\+]+)[\s\|]+'
$found = $body -match '.+?\s+([^\ ]+.+?\.c[\+]+)[\s\|]+'
$found = $body -match '.+?\s+([^\s]+.+?\.c[\+]+)[\s\|]+'
他们中没有一个工作,甚至没有更多的工作。在大多数情况下,这只检测整条线路
有什么想法吗?这个怎么样
\/\/\| *([^ ]*)
\/
匹配字符/
\/
匹配字符/
\\\\\\
匹配字符\
*
将0与许多字符匹配
圆括号
()
是第一个捕获组[^]
捕获所有属于^
(非)空格的字符(只要您的所有文件名不包含空格,这应该可以使用)我认为您的问题比我在您的注释中看到的更基本,但我有这个功能,可以用于测试字符串
$string = @"
//| Vegas.c |
"@
只需在管道之间查找数据,并将管道边框留白即可。不确定它将如何处理真实数据,但如果程序名中有空格,它应该可以工作
[void]($string -match "\|\s+(.+)\s+\|")
$Matches[1]
Vegas.c
您还可以在PowerShell中使用命名匹配
[void]($string -match "\|\s+(?<Program>.+)\s+\|")
$Matches.Program
Vegas.c
[void]($string-match“\\\\s+(?。+)\s+\\\”)
$Matches.Program
维加斯
谢谢!。++(.+?\.mq[4h]+)[\s\|]+'我稍微改变了你的建议,现在它可以工作了!