2015-12-17 27 views
-1

我想給用戶在某些數據中搜索的可能性。 用戶在文本框中輸入他的搜索字符串。 更高級的用戶應該能夠輸入不僅純文本,而且正則表達式爲更好的搜索結果(並設置一個複選框告訴我們,他已經進入了一個正則表達式)如何在RegEx和純文本之間切換用戶輸入的搜索字符串

我目前有這個實現,將每個輸入視爲正則表達式。

string filter = sometextbox.Text; 
Regex rgx = new Regex(filter); 
for (int i = 0; i < data.Count; i++) 
{ 
    if (rgx.IsMatch(data[i].Content)) 
    { 
     // Found it, preset it to the user 
     break; 
    } 
} 

我如何處理輸入的正則表達式或純文本之間的變化?

+6

不能檢查,如果一個字符串 「[A]」 是一個正則表達式模式或純文本。你需要一個複選框「正則表達式模式」。如果選中,則使用正則表達式作爲輸入模式。如果沒有,請使用簡單的'string.Contains'等。 –

+1

@stribizhev我不想檢測,如果用戶輸入正則表達式或簡單的文本。他應該設置一個複選框來識別正則表達式。 (我在問題中寫到...) – thowa

回答

1
string filter = sometextbox.Text; 
Regex rgx = new Regex(filter); 
bool IsRegEx = RegExCheckBox.Checked; 

List<string> Matches = new List<string>(); 

for (int i = 0; i < data.Count; i++) 
{ 
    if (IsRegEx && rgx.IsMatch(data[i].Content)) 
     Matches.Add(data[i].Content); 
    else if (!IsRegEx && data[i].Content.ToLower().Contains(filter.ToLower())) 
     Matches.Add(data[i].Content); 
} 

//Do something with your list of Matches 
2

我希望我能理解你的問題。 我知道你想用CheckBox控件打開/關閉正則表達式搜索,你所要做的就是檢查CheckBox的狀態並確定你要用來執行搜索的代碼。

string filter = sometextbox.Text; 
if(RegexCheckBox.IsChecked) 
{ 
    Regex rgx = new Regex(filter); 
    for (int i = 0; i < data.Count; i++) 
    { 
     if (rgx.IsMatch(data[i].Content)) 
     { 
      // Found it, preset it to the user 
      break; 
     } 
    } 
} 
else 
{ 
    for (int i = 0; i < data.Count; i++) 
    { 
     if(data[i] == filter) 
     { 
      //found it, present it to the user 
      break; 
     } 
    } 
} 
+0

這是我想要的。它非常簡單。我想的很複雜。非常感謝你。 – thowa

+2

很好的答案,但如果數據[i]不完全匹配輸入的文本,這將無法正常工作。嘗試使用包含像在我的答案,以便用戶可以搜索部分模式(對他們來說效率更高)。 –

相關問題