2011-06-07 52 views
5

我有一个字符串列表。当用户输入字符时,程序会在文本框中显示列表中所有可能的字符串。Visual Basic正则表达式问题

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

例如如果用户输入一个,P,L,E,R,则程序将显示苹果和梨。 它应该匹配所有已输入字母的条目,不管顺序如何,也不管附加字母。 我应该向rx添加什么?如果使用正则表达式不可能,请指定其他任何方式来执行此操作。

+2

为什么苹果和梨出现而不是其他? – Flash 2011-06-07 12:42:28

+0

输入字符的顺序是否相关?例如。 'a,p,l'与'apple'匹配,但'p,l,a'不?并且:在你的例子中,梨应该真的匹配吗?因为你的角色列表中有一个'l'。 – 2011-06-07 12:45:29

+0

因为用户没有输入o,n,g代表桔子,b代表香蕉,n代表香蕉。这个想法是显示所有字,已输入的字符。 – Cobold 2011-06-07 12:45:57

回答

7

LINQ方法:

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()) 

正则表达式的方法:

一个正则表达式匹配的结果将类似于这样的:

"^[apler]+$" 

这可以建立起来的:

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

梨不会失败吗?另外,在我看来,它会返回包含'a,p,l,e'的任何单词,但也包含其他字母,如'maple'。 – 2011-06-07 12:57:47

+0

@你的评论是正确的。我错过了OP的评论中的澄清。 – 2011-06-07 13:02:55

+0

@Joel查看更新方法。现在应该考虑到这些问题。 – 2011-06-07 13:14:50