2011-12-21 155 views
9

我試圖在PowerShell中使用正則表達式來刪除此字符串中最後一個斜槓的所有內容;正則表達式,刪除最後一個正斜槓後的所有內容

NorthWind.ac.uk/Users/Current/IT/Surname, FirstName 
NorthWind.ac.uk/Users/Dormant/DifferentArea/Surname, FirstName 

我需要刪除姓氏,名字包括/。 該字符串應該看起來像這樣。

NorthWind.ac.uk/Users/Current/IT 

如果有人能幫助我,我將非常感激。

我試過這個; -replace '([/])$',''但我似乎無法得到它的工作。

感謝

回答

25

爲空字符串

+0

絕對美麗。 ** - 替換'/ [^ /] * $',''** – 2011-12-21 12:54:34

+0

您能爲我解釋一下嗎? – 2011-12-21 12:56:30

+0

它會查找'/',然後是零個或多個字符,而不是'/',後面是字符串的結尾。 – 2011-12-21 13:00:57

0

檢查這個表達式http://regexr.com?2vhll 我無法測試它在PowerShell的,但它在正則表達式生成器

/(?!.*/).* 
0

這裏工作更換/[^/]*$是一個解決方案,不需要正則表達式:

PS> $cn = 'NorthWind.ac.uk/Users/Current/IT/Surname, FirstName' -split '/' 
PS> $cn[0..($cn.count-2)] -join '/' 
NorthWind.ac.uk/Users/Current/IT 
0

此解決方案不使用正則表達式。 我認爲這種做法可能更容易理解,所有的正則表達式後 - 一般 - 難以閱讀:

NorthWind.ac.uk/Users/Current/IT/Surname, FirstName具有路徑狀結構(窗口還支持正斜槓作爲路徑分隔符),這樣我們就可以使用分割路徑返回父目錄路徑。

因爲「\」是默認的路徑分隔符,我們需要用「/」這樣做後,以取代「\」:

(split-path NorthWind.ac.uk/Users/Current/IT/Surname, FirstName).replace('\','/') 
# will return NorthWind.ac.uk/Users/Current/IT 
0

下面是不需要的正則表達式另一種解決方案:

以開始在該字符串的開頭和最後一個斜線的字符串中的索引之前結束的字符串的一個子:

PS> $indexoflastslash = ("NorthWind.ac.uk/Users/Current/IT/Surname, FirstName").lastindexof('/') 
PS> "NorthWind.ac.uk/Users/Current/IT/Surname, FirstName".substring(0,$indexoflastslash) 
相關問題