windows PowerShell -获取第一个“-”之后的所有内容

pnwntuvh  于 2022-12-05  发布在  Windows
关注(0)|答案(1)|浏览(124)

下面的代码:

$TodayDate = Get-Date -Format "dd-MM-yyyy"
$Student = Student01 - Project 01-02 - $TodayDate

Write-Host -NoNewline -ForegroundColor White "$Student"; Write-Host -ForegroundColor Green " - was delivered!"

此脚本在控制台中返回:

Student01 - Project 01-02 - dd-MM-yyyy - was delivered

怎么可能只返回第一个“-"?之后的所有内容,即Project 01-02 - dd-MM-yyyy - was delivered
我曾考虑过使用.split,但我无法使它工作,以便它返回第一个“-"之后的所有内容。

qlckcl4x

qlckcl4x1#

您的问题归结为想要从字符串中删除 * 前缀
如果要移除的前置词不能定义为静态的常值字串,而是由(包含)***第一个 * 出现的 * 分隔符号
所定义,则您有两个PowerShell惯用的选项**:

  • 使用**-split运算符,该运算符允许您限制生成的标记的数量**;如果将它们限制为 2,则第一个分隔符之后的所有内容都将按原样返回;因此,第二(也是最后一个)令牌(可通过索引[-1]访问)则包含感兴趣的后缀:
$str = 'Student01 - Project 01-02 - dd-MM-yyyy - was delivered'

# Split by ' - ', and return at most 2 tokens, then extract the 2nd (last) token.
# -> 'Project 01-02 - dd-MM-yyyy - was delivered'
($str -split ' - ', 2)[-1]
  • 使用**-replace运算符,该运算符(默认情况下类似于-split)基于regex,并且允许您制定一个 pattern,该 pattern 匹配第一个分隔符之前的任何前缀(包括第一个分隔符),然后可以删除该分隔符:
$str = 'Student01 - Project 01-02 - dd-MM-yyyy - was delivered'

# Match everything up to the *first* ' - ', and remove it.
# Note that not specifying a *replacement string* (second RHS operator)
# implicitly uses '' and therefore *removes* what was matched.
# -> 'Project 01-02 - dd-MM-yyyy - was delivered'
$str -replace '^.+? - '
  • 有关正则表达式(^.+? -)的解释以及使用它进行实验的能力,请参见this regex101.com page

相关问题