2011-06-07 15 views
5

Tengo una lista de cadenas. Cuando el usuario ingresa caracteres entrantes, el programa mostrará todas las cadenas posibles de la lista en un cuadro de texto.Expresión regular de Visual Basic Pregunta

Dim fruit as new List(Of String) 'contains apple,orange,pear,banana 
Dim rx as New Regex(fruit) 

Por ejemplo, si el usuario entra a, p, l, e, r, a continuación, el programa mostrará manzana y pera. Debe coincidir con cualquier entrada para la que se hayan ingresado todas las letras, independientemente del orden y sin importar letras adicionales. ¿Qué debo agregar a rx? Si no es posible con expresiones regulares, especifique otras formas de hacerlo.

+2

¿Por qué aparecen la manzana y la pera y no las otras? – Flash

+0

¿El orden de los caracteres de entrada es relevante? P.ej. 'a, p, l' coincide con' apple' pero 'p, l, a' no? Y: ¿debería 'pera' realmente coincidir en tu ejemplo? Porque hay un 'l' en tu lista de personajes. –

+0

Porque el usuario no ingresó o, n, g para naranja yb, n para plátano. La idea es mostrar todas las palabras, qué caracteres se han ingresado. – Cobold

Respuesta

7

LINQ Enfoque:

Dim fruits As New List(Of String) From { "apple", "orange", "pear", "banana" } 
Dim input As String = "a,p,l,e,r" 
Dim letters As String = input.Replace(",", "") 
Dim result = fruits.Where(Function(fruit) Not fruit.Except(letters).Any()) 

Enfoque Regex:

Un patrón de expresión regular para que coincida con los resultados se parecería a algo como:

"^[apler]+$" 

Esto puede ser construido como :

Dim fruits As New List(Of String) From { "apple", "orange", "pear", "banana" } 
Dim input As String = "n,a,b,r,o,n,g,e" 
Dim letters As String = input.Replace(",", "") 
Dim pattern As String = "^[" + letters + "]+$" 
Dim query = fruits.Where(Function(fruit) Regex.IsMatch(fruit, pattern)) 
+0

¿No fallaría esto para la pera? Además, me parece que devolvería cualquier palabra que contuviera 'a, p, l, e' pero también contuviera otras letras, como' maple'. –

+0

@Joel, su comentario es correcto. Me perdí la aclaración en los comentarios del OP. –

+0

@Joel revisa el enfoque de actualización. Ahora debería tener en cuenta esos problemas. –