2011-12-21 19 views
9

Estoy tratando de usar una expresión regular en PowerShell para eliminar todo lo de la última barra en esta cadena;Expresión regular, elimine todo después de la última barra diagonal

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

Necesito eliminar el apellido, el primer nombre incluido el /. La cadena debería verse así.

NorthWind.ac.uk/Users/Current/IT 

Si alguien me puede ayudar, estaría muy agradecido.

He intentado esto; -replace '([/])$','' pero parece que no puedo hacer que funcione.

Gracias

Respuesta

25

Reemplazar /[^/]*$ con una cadena vacía

+0

absolutamente hermosa. ** - reemplace '/ [^ /] * $', '' ** –

+0

¿Puede explicar eso por favor? –

+0

Busca un '/', seguido de cero o más caracteres que no sean '/', seguidos por el final de la cadena. –

0

cheque esta expresión regular http://regexr.com?2vhll No puedo probarlo en powershell pero trabajar en el generador de expresiones regulares

/(?!.*/).* 
0

Aquí hay una solución que no requiere expresiones regulares:

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

Esta solución no usa expresiones regulares. Creo que este enfoque es probablemente más fácil de entender, después de que todas las expresiones regulares - en general - son difíciles de leer:

NorthWind.ac.uk/Users/Current/IT/Surname, FirstName tiene una estructura de ruta similar (ventanas también es compatible con la barra diagonal como separador de ruta), para que pudiéramos utilice split-path para devolver la ruta padre 'directorio'.

Debido a '\' es el separador de ruta por defecto, tenemos que reemplazar el '\' con '/' después de hacer esto:

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

Aquí hay otra solución que no requiere de expresiones regulares:

Tome una subcadena de la cadena que comienza al principio de la cadena y que termina antes de que el índice de la última barra en su cadena:

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