Jam*_*own 1 regex string powershell
我无法修剪字符串末尾的某些字符.字符串通常如下所示:
C:\blah1\blah2
Run Code Online (Sandbox Code Playgroud)
但有时它看起来像:
C:\blah1\blah2.extra
Run Code Online (Sandbox Code Playgroud)
我需要提取字符串'blah2'.大多数情况下,使用substring命令很容易.但是在极少数情况下,当存在'.extra'部分时,我需要首先修剪该部分.
问题是,'.extra'总是以点开头,然后是各种长度的字母的各种组合.所以通配符是必要的.本质上,我需要编写脚本,"如果字符串包含一个点,则修剪点和后面的任何内容."
$string.replace(".*","")不起作用.也没有$string.replace(".\*","").也没有$string.replace(".[A-Z]","").
此外,我无法从字符串的开头得到它.'blah1'未知且长度各异.我必须从字符串的末尾开始'blah2'.
假设字符串始终是包含或不包含扩展名的文件的路径(例如".extra"),您可以使用 Path.GetFileNameWithoutExtension():
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("C:\blah1\blah2")
blah2
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("C:\blah1\blah2.extra")
blah2
Run Code Online (Sandbox Code Playgroud)
该路径甚至不必植根:
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("blah1\blah2.extra")
blah2
Run Code Online (Sandbox Code Playgroud)
如果你想自己实现类似的功能,那应该也很简单 - 用于String.LastIndexOf()查找字符串中的最后一个 \并将其用作你的起始参数Substring():
function Extract-Name {
param($NameString)
# Extract part after the last occurrence of \
if($NameString -like '*\*') {
$NameString = $NameString.Substring($NameString.LastIndexOf('\') + 1)
}
# Remove anything after a potential .
if($NameString -like '*.*') {
$NameString.Remove($NameString.IndexOf("."))
}
$NameString
}
Run Code Online (Sandbox Code Playgroud)
你会看到类似的结果:
PS C:\> Extract-Name "C:\blah1\blah2.extra"
blah2
PS C:\> Extract-Name "C:\blah124323\blah2.extra"
blah2
PS C:\> Extract-Name "C:\blah124323\blah2"
blah2
PS C:\> Extract-Name "abc124323\blah2"
blah2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |