2015-12-17 28 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]不完全匹配输入的文本,这将无法正常工作。尝试使用包含像在我的答案,以便用户可以搜索部分模式(对他们来说效率更高)。 –

相关问题