Powershell正则表达式 - 匹配直到角色

Joh*_*ohn 1 regex powershell

所以我需要做的是匹配文字,直到我击中某个角色,然后停止.现在我正好想让它正常工作,此时我觉得我只是让自己更加困惑.我正在搜索的文字如下:

ServerA_logfile.log
ServerB_logfile.log
ServerC_logfile.log
Run Code Online (Sandbox Code Playgroud)

我需要做的只是返回服务器名称,并排除下划线字符后的所有内容.

这是我的代码:

Get-ChildItem \\fileshare\logs\ -Name -Filter *.log | foreach { [regex]::match($_ -replace "^_", "")}
Run Code Online (Sandbox Code Playgroud)

它返回的是......好吧,没有帮助,但那是我能得到的好.

我错过了什么?

tri*_*tan 5

你需要的是积极的前瞻(它是在比赛前比赛量身定做的)

[Regex]::Match($_, "^.+(?=_)").Value
Run Code Online (Sandbox Code Playgroud)

Match()不返回字符串,而是返回一个Match对象.因此,Value应该访问该属性以从对象中提取字符串.

如果不清楚,使用的表达式指定查找:

  • 在行的开头(^)
  • 任何长度的字符串(长于或等于一个字符)(.+)
  • 接下来是下划线((?=_)),这是积极的前瞻