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\|]+'我稍微改变了你的建议,现在它可以工作了!