Título: Regex + split con dos delimitadores en c# Publicado por: DrKillador en 30 Julio 2017, 10:27 am Buenas,
Estoy haciendo una expresión regular en c# que me está costando sacar, para extraer de un string todos las palabras contenidas entre dos caracteres, y exportarlas a una lista. Ej. Dado el siguiente string: .hola$.que$.tal$ Querría tener la siguiente lista hola que tal Este es el código que estoy tratando de usar y que no me funciona... Código Gracias por su ayuda! Título: Re: Regex + split con dos delimitadores en c# Publicado por: ivancea96 en 30 Julio 2017, 13:01 pm En regex, el punto y el dolar (. $) son caracteres especiales. Tienes que ponerles delante una barra invertida (\) para buscarlos en el texto.
Y bueno, no sé qué es lo que pretendes con el "{p}". Si lo que quieres es buscar lo que hay entre . y &, lo puedes hacer buscando un grupo de caracteres (+) que tenga cualquier caracter menos el punto y el dolar. Para ello: [^\.\$]. Con el ^ haces que sea algo que NO contenga esos caracteres. En fin: \.([^\.\$]+)\$ No te olvides de que las barras invertidas son caracteres de escape también en C#, por lo que tendrás que poner 2 barras invertidas en vez de 1. Título: Re: Regex + split con dos delimitadores en c# Publicado por: DrKillador en 30 Julio 2017, 14:35 pm Muchas gracias!! veo que tenía 2 errores. Sin embargo no me acaba de funcionar bien, entiendo que porque os puse un ejemplo poco claro.
Si tuviese ahora una frase como la siguiente, no me funciona la regex: 1213.hola$123.que$213.tal$234 Mi objetivo dada la frase anterior, es que igualmente obtenga la siguiente lista: hola que tal Separando y extrayendo a la lista solo las palabras contenidas entre el . y el $ Gracias! Título: Re: Regex + split con dos delimitadores en c# Publicado por: ivancea96 en 30 Julio 2017, 14:44 pm ¿Y cuál es el resultado que te da con esa frase?
Ese regex hace eso, coger "hola", "que" y "tal". Si tal, pon el código que usaste. Título: Re: Regex + split con dos delimitadores en c# Publicado por: DrKillador en 30 Julio 2017, 14:51 pm Sure! este es mi código:
Código
Y esto me pinta por pantalla lo siguiente: 1213 hola 123 que 213 tal 234 Podría hacer un apaño eliminando de la lista los elementos impares... pero seguro que con una regex se puede hacer de un golpe y más eficiente Título: Re: Regex + split con dos delimitadores en c# Publicado por: Eleкtro en 30 Julio 2017, 15:38 pm Hola.
1. Estás en un foro de programación, por favor publica los bloques de código con el formato adecuado utilizando las etiquetas GeShi. 2. Las preguntas sobre C# van en el subforo de programación .NET 3. Está prohibido hacer doble post, puedes usar el botón "Modificar" (para algo está). Lee las reglas del foro por favor... El código que has mostrado hace lo que debe, partir el string en base a las capturas/coincidencias de la expresión que le has indicado. En tu expresión regular hay dos agrupaciones, la agrupación 0 (todo), y la agrupación 1 (lo que está dentro del primer grupo de paréntesis). Solamente quieres quedarte con las capturas de la agrupación 1, pues eso debes hacerlo especificando el índice del grupo "1" o en su defecto también puedes asignarle un nombre: Código
Resultado de ejecución: Código: hola Saludos Título: Re: Regex + split con dos delimitadores en c# Publicado por: ivancea96 en 30 Julio 2017, 15:48 pm Bueno, vemaos 2 cosas. La primera, esto es un Regex.Split, con lo cual vas a tener la cadena dividida por lo encontrado. Es decir, el resultado será "123","456","789". (La razón de que se vea también el "hola","que","tal" es por los paréntesis del regex)
Lo que buscas ahora es Regex.Matches, que busca todas las ocurrencias del regex (perdona que no haya visto antes el Split) Para eso, cambias el .Split() por .Matches(). No puedes hacer directamente el ToList(), eso sí. Código
Eso sí, de este modo también te traerá el punto y el dolar. Habrá que hacer un regex algo diferente para evitar esto. Título: Re: Regex + split con dos delimitadores en c# Publicado por: DrKillador en 30 Julio 2017, 15:55 pm Gracias a ambos y disculpad que haya publicado mal!
He aprendido mucho de vuestras explicaciones ;-) |