2011-06-07 53 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