PowerShell 我想在特定字符序列后截断一个字符串
PowerShell I want to cut off a string after a specific character sequence
我正在尝试解析一个字符串变量,其中 -354 之后的所有内容都被截断。
我有这样的变量:NameOfFile-354-XX.pdf
其中 NameOfFile 可以是任意长度,-XX 可以是任何长度,也可以根本不存在。
我希望此变量的输出为:NameOfFile-354
如何剪切变量以便它在 -354 之后剪切?
到目前为止我尝试过的:
$FileArray = @("Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf")
ForEach ($n in $FileArray){
Write-Host $n.Substring(0, $n.lastIndexOf('-354'))
}
我希望输出是这样的:
Name1-354
Name23-354
Name354-354
Name3545-354
感谢您的帮助。
我不是正则表达式专业人士,但这样的东西对你有用吗?
$string = "NameOfFile-354-XX.pdf"
$regex = "(.*)(-[a-zA-Z0-9]+(.)(.*))"
$match = $string -replace $regex,''
输出将是这样的:
PS C:\temp> $string = "NameOfFile-354-XX.pdf"
$regex = "(.*)(-[a-zA-Z0-9]+(.)(.*))"
$match = $string -replace $regex,''
Write-Host $match
NameOfFile-354
PS C:\temp>
正则表达式详细信息:https://regex101.com/r/Fw8F3i/1
假设-354
是一个常数值:
$FileArray = [System.IO.FileInfo[]]@(
"Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf"
)
$FileArray.ForEach({ $_.Name -replace '(?<=-354).*(\.pdf)', '' })
# Outputs:
Name1-354.pdf
Name23-354.pdf
Name354-354.pdf
Name3545-354.pdf
对于regex的解释:https://regex101.com/r/4Butm2/1
A regex 解决方案 - 例如 - 绝对是一个选项,但你最初尝试中唯一缺少的是 add您要搜索的子字符串的长度 - 即 '-354'.Length
== 4
- 到第二个 .Substring()
参数,以便在返回的字符串中包含该子字符串:
"Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf" |
ForEach-Object {
$_.Substring(0, $_.LastIndexOf('-354') + 4) # Note the + 4
}
我正在尝试解析一个字符串变量,其中 -354 之后的所有内容都被截断。
我有这样的变量:NameOfFile-354-XX.pdf
其中 NameOfFile 可以是任意长度,-XX 可以是任何长度,也可以根本不存在。
我希望此变量的输出为:NameOfFile-354
如何剪切变量以便它在 -354 之后剪切?
到目前为止我尝试过的:
$FileArray = @("Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf")
ForEach ($n in $FileArray){
Write-Host $n.Substring(0, $n.lastIndexOf('-354'))
}
我希望输出是这样的:
Name1-354
Name23-354
Name354-354
Name3545-354
感谢您的帮助。
我不是正则表达式专业人士,但这样的东西对你有用吗?
$string = "NameOfFile-354-XX.pdf"
$regex = "(.*)(-[a-zA-Z0-9]+(.)(.*))"
$match = $string -replace $regex,''
输出将是这样的:
PS C:\temp> $string = "NameOfFile-354-XX.pdf"
$regex = "(.*)(-[a-zA-Z0-9]+(.)(.*))"
$match = $string -replace $regex,''
Write-Host $match
NameOfFile-354
PS C:\temp>
正则表达式详细信息:https://regex101.com/r/Fw8F3i/1
假设-354
是一个常数值:
$FileArray = [System.IO.FileInfo[]]@(
"Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf"
)
$FileArray.ForEach({ $_.Name -replace '(?<=-354).*(\.pdf)', '' })
# Outputs:
Name1-354.pdf
Name23-354.pdf
Name354-354.pdf
Name3545-354.pdf
对于regex的解释:https://regex101.com/r/4Butm2/1
A regex 解决方案 - 例如 '-354'.Length
== 4
- 到第二个 .Substring()
参数,以便在返回的字符串中包含该子字符串:
"Name1-354-03.pdf", "Name23-354-H11.pdf", "Name354-354-02.pdf", "Name3545-354.pdf" |
ForEach-Object {
$_.Substring(0, $_.LastIndexOf('-354') + 4) # Note the + 4
}