elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Regex + split con dos delimitadores en c#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Regex + split con dos delimitadores en c#  (Leído 4,938 veces)
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Regex + split con dos delimitadores en c#
« 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
  1. List<string> l = new List<string>();
  2. l = Regex.Split(str, @".{p}$").ToList();
  3.  
Gracias por su ayuda!


« Última modificación: 30 Julio 2017, 15:40 pm por Eleкtro » En línea

Python <3 Python
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Regex + split con dos delimitadores en c#
« Respuesta #1 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.


En línea

DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Regex + split con dos delimitadores en c#
« Respuesta #2 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!
En línea

Python <3 Python
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Regex + split con dos delimitadores en c#
« Respuesta #3 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.
En línea

DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Regex + split con dos delimitadores en c#
« Respuesta #4 en: 30 Julio 2017, 14:51 pm »

Sure! este es mi código:

Código
  1. string str = "1213.hola$123.que$213.tal$234";
  2. List<string> l = new List<string>();
  3. l = Regex.Split(str, @"\.([^\.\$]+)\$").ToList();
  4. foreach(string s in l)
  5. {
  6. Textbox1.Text+=s+"\r\n";
  7. }

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
« Última modificación: 30 Julio 2017, 15:41 pm por Eleкtro » En línea

Python <3 Python
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Regex + split con dos delimitadores en c#
« Respuesta #5 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
  1. string str = "1213.hola$123.que$213.tal$234";
  2. Regex rgx = new Regex(@"\.(?<nombre_de_grupo>[^\.\$]+)\$", RegexOptions.None);
  3. MatchCollection matches = rgx.Matches(str);
  4.  
  5. foreach (Match match in matches) {
  6.    Console.WriteLine(match.Groups["nombre_de_grupo"].Value);
  7. }

Resultado de ejecución:
Código:
hola
que
tal

Saludos
« Última modificación: 30 Julio 2017, 15:44 pm por Eleкtro » En línea



ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Regex + split con dos delimitadores en c#
« Respuesta #6 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
  1. var str = "687.hola$123.que$213.tal$234";
  2. var regex = @"\.[^\.\$]+\$";
  3. var matches = Regex.Matches(str, regex);
  4.  
  5. var n = 1;
  6.  
  7. foreach (Match match in matches)
  8. {
  9.    Console.WriteLine(n++ + ": " + match.Value);
  10. }

Eso sí, de este modo también te traerá el punto y el dolar. Habrá que hacer un regex algo diferente para evitar esto.
En línea

DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Regex + split con dos delimitadores en c#
« Respuesta #7 en: 30 Julio 2017, 15:55 pm »

Gracias a ambos y disculpad que haya publicado mal!

He aprendido mucho de vuestras explicaciones  ;-)
En línea

Python <3 Python
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH]Problema con delimitadores xD
Scripting
FranciskoAsdf 4 5,784 Último mensaje 27 Marzo 2011, 09:08 am
por FranciskoAsdf
2 delimitadores para obtener texto (vb.net)
.NET (C#, VB.NET, ASP)
<housedir> 4 6,099 Último mensaje 22 Julio 2013, 22:13 pm
por Eleкtro
Extraer Palabra de un String con delimitadores
PHP
spysecurityca 4 3,817 Último mensaje 3 Septiembre 2014, 16:51 pm
por WHK
Delimitadores consecutivos
Scripting
Gokuman 2 2,746 Último mensaje 14 Marzo 2015, 04:03 am
por FranciskoAsdf
MOVIDO: Regex + split con dos delimitadores en c#
Programación General
Eleкtro 0 1,979 Último mensaje 30 Julio 2017, 15:38 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines