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


至于您的正则表达式尝试,显然没有必要为此花费这么长的时间,但是您的尝试失败了,原因如下:

  • 您反转了搜索的值和搜索的字符串。您必须使用
    search
    字符串作为模式来构建regex实例
  • 说到这里,你应该转义搜索值。如果它包含任何正则表达式元字符,则该模式将无效。为此,您可以使用
    Regex.Escape
因此,以下方法可能有效,但不是做这项工作的正确方法:

if (!Regex.IsMatch(row.Cells[1].Value.ToString(), Regex.Escape(search), RegexOptions.IgnoreCase))

在您的回答中,以下参数的含义是什么?它将如何工作

this string str

我的意思是
这个
和静态如何共存

谢谢你的帮助和解释!它工作得很好。只要看看扩展方法就知道了。这篇文章应该是一个评论来回答。请尽快删除此项。