2010-07-26 24 views
9

tengo unas cadenas como "/ LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"Cómo cortar una cadena

Y yo sólo necesitan "175_Jahre_STAEDTLER_Faszination_Schreiben", donde "raíz" es separador. ¿Cómo puedo hacer esto?

+0

+1 por el título, me recuerda a la sintaxis correcta resaltar un león –

+4

... ¿usar tijeras? – Randolpho

+1

¿Cuánto mide la cuerda? –

Respuesta

2

Revise los métodos de System.IO.Path - ¡no exactamente archivos y carpetas, pero con/delimiter podría funcionar!

+4

Parece que podría ser propenso a algunos efectos secundarios desagradables. –

+0

@Mike - sí, puede que tengas razón. Me gusta el .split responde mejor. – n8wrl

+0

Sí, debido a las suposiciones sobre lo que constituye un separador válido. Mejor evitar –

20

"/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben".Split("/root/")[1] debería darle "175_Jahre_STAEDTLER_Faszination_Schreiben"

+5

Por supuesto, probablemente debería asignarlo a una variable y comprobar que pudo dividir correctamente la cadena, para evitar excepciones para cadenas mal formadas. – NickAldwin

0

Uso String.Split para separar la cadena con "raíz" como separador. Luego use el segundo elemento de la matriz resultante.

0
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
int li = s.LastIndexOf("root/"); 
s = s.Substring(li + 5, s.Length - 1 - (li + 4)); 
MessageBox.Show(s); 
+1

Mencionó que quería dividirse en "raíz", no necesariamente en una barra arbitraria ... pero esto es bueno para la división general. – NickAldwin

+0

Sí, tienes razón Nick. Estoy editando mi respuesta, gracias – anilca

4

Otro método:

String newstring = file_path.Substring(file_path.LastIndexOf('/') + 1); 
1

Si usted está buscando para extraer una parte de una cadena basada en un patrón general, las expresiones regulares puede ser una buena alternativa en algunas situaciones.

string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
Regex re = new Regex(@"/root/(?<goodPart>\w+)$"); 
Match m = re.Match(s); 
if (m.Success) { 
    return m.Groups["goodPart"].ToString(); 
} 
+0

Regex es definitivamente una buena solución para problemas más complicados (y no tengo idea de lo complicado que es en realidad el problema del OP) ... solo debes tener en cuenta el pequeño golpe de rendimiento. Regex tiene su lugar, pero si una simple división o subcadena hará el truco, el uso de expresiones regulares en realidad puede ser perjudicial. (No tengo nada en contra de las expresiones regulares, ¡las uso todo el tiempo!Solo imparto comentarios útiles :) – NickAldwin

+0

@NickAldwin, estoy de acuerdo, simplemente presentando una alternativa para completar. Edité mi respuesta para aclarar un poco, eso espero. –

+0

Sí, entiendo eso y creo que es importante tener las alternativas visibles (de ahí mi voto positivo :). Estaba aclarando el punto Regex vs Split. Gracias por publicar (y edición para mayor claridad)! – NickAldwin

0

Si usted necesita encontrar una ruta relativa basada en una ruta de la base (que suena como lo que el problema que está tratando de resolver es, o al menos una generalización de su problema) se puede utilizar el sistema. Clase de Uri Sin embargo, tiene sus limitaciones. La forma más limpia y correcta de encontrar una ruta relativa es usar DirectoryInfo. Con DirectoryInfo puede "recorrer" el árbol de directorios (hacia atrás o hacia adelante) y crear una jerarquía basada en eso. Luego haga una pequeña manipulación del conjunto para filtrar los duplicados y lo que le queda es su ruta relativa. Hay algunos detalles, como agregar puntos suspensivos en el lugar correcto, etc., pero DirectoryInfo es un buen lugar para comenzar a analizar rutas basadas en la plataforma actual del sistema operativo.

FYI - Acabo de terminar de escribir un componente aquí en el trabajo para hacer eso, así que es bastante fresco en mi mente.

1
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
string separator = "root"; 
string slash = "/"; 
int idx = s.IndexOf(separator); 
string result = s.SubString(idx + separator.Length + slash.Length); 
Cuestiones relacionadas