C# C语言中不区分大小写的搜索函数#
我想在我的C# C语言中不区分大小写的搜索函数#,c#,regex,search,datagridview,C#,Regex,Search,Datagridview,我想在我的DataGridView上创建一个搜索函数,在一个按钮点击事件后面。为此,我使用了以下源代码: chargerDataGrid(); dg_logiciel.ClearSelection(); string search = txtbox_recherche.Text; foreach (DataGridViewRow dgvr in dg_logiciel.Rows) { if (!dgvr.Cells[1].Value.ToString().Contains(search
DataGridView
上创建一个搜索函数,在一个按钮点击事件后面。为此,我使用了以下源代码:
chargerDataGrid();
dg_logiciel.ClearSelection();
string search = txtbox_recherche.Text;
foreach (DataGridViewRow dgvr in dg_logiciel.Rows)
{
if (!dgvr.Cells[1].Value.ToString().Contains(search))
{
dgvr.Visible = false;
}
}
它正在工作,但我想比较一下我的两个字符串。为此,我尝试了以下代码:
chargerDataGrid();
dg_logiciel.ClearSelection();
string search = txtbox_recherche.Text;
foreach (DataGridViewRow row in dg_logiciel.Rows)
{
Regex pattern = new Regex(row.Cells[1].Value.ToString(), RegexOptions.IgnoreCase);
if (!pattern.IsMatch(search))
{
row.Visible = false;
}
}
这根本不起作用。我使用的
Regex
类还是什么 不幸的是,.NET缺少string.Contains(string,StringComparison)
函数重载
但是您可以很容易地将这样的扩展函数添加到您的项目中,因为我们有一个合适的IndexOf
重载:
public static class StringExtensions
{
public static bool Contains(this string str, string value, StringComparison comparison)
{
return str.IndexOf(value, comparison) >= 0;
}
}
然后简单地使用:
if (!dgvr.Cells[1].Value.ToString().Contains(search, StringComparison.OrdinalIgnoreCase))
或者根据需要使用CurrentCultureInogoreCase
至于您的正则表达式尝试,显然没有必要为此花费这么长的时间,但是您的尝试失败了,原因如下:
- 您反转了搜索的值和搜索的字符串。您必须使用
字符串作为模式来构建regex实例search
- 说到这里,你应该转义搜索值。如果它包含任何正则表达式元字符,则该模式将无效。为此,您可以使用
Regex.Escape
if (!Regex.IsMatch(row.Cells[1].Value.ToString(), Regex.Escape(search), RegexOptions.IgnoreCase))
在您的回答中,以下参数的含义是什么?它将如何工作
this string str
我的意思是
这个
和静态如何共存谢谢你的帮助和解释!它工作得很好。只要看看扩展方法就知道了。这篇文章应该是一个评论来回答。请尽快删除此项。