2011-12-21 12 views
9

Próbuję użyć wyrażenia regularnego w PowerShell, aby usunąć wszystko z ostatniego ukośnika w tym ciągu;Wyrażenie regularne, usuń wszystko po ostatnim ukośniku w przód

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

Muszę usunąć nazwisko, imię zawierające znak /. Ciąg powinien wyglądać tak.

NorthWind.ac.uk/Users/Current/IT 

Jeśli ktoś mógłby mi pomóc, byłbym bardzo wdzięczny.

Próbowałem tego; -replace '([/])$','', ale nie mogę tego zmusić do działania.

Dzięki

Odpowiedz

25

Wymień /[^/]*$ z pustym ciągiem

+0

absolutnie piękne. ** - zamień "/ [^ /] * $", "'** –

+0

Czy możesz mi to wyjaśnić? –

+0

Szuka znaku "/", po którym następuje zero lub więcej znaków innych niż "/", a następnie koniec ciągu znaków. –

0

sprawdzić ten regex http://regexr.com?2vhll nie mogę przetestować go na PowerShell, ale to działa w generatorze regex

/(?!.*/).* 
0

Oto rozwiązanie, które nie wymaga wyrażeń regularnych:

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

To rozwiązanie nie używa wyrażeń regularnych. Wierzę, że to podejście jest chyba łatwiejsze do zrozumienia, po wszystkich regexes - w ogóle - są trudne do odczytania:

NorthWind.ac.uk/Users/Current/IT/Surname, FirstName ma strukturę path-like (Windows obsługuje również ukośnika jako separatora ścieżki), więc mogliśmy użyj metody split-path, aby zwrócić ścieżkę katalogu macierzystego.

Bo „\” jest separator Domyślna ścieżka, musimy zastąpić „\” z „/” po zrobieniu tego:

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

Oto kolejny rozwiązanie, które nie wymaga wyrażeń regularnych:

Weź podciąg swojego ciąg rozpoczynający się na początku łańcucha i kończący się przed indeksem ostatniego ukośnik w Twoim ciąg:

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