有没有办法在C#中搜索字符串中的模式?

类似Sql的东西会非常有用.

推荐答案

正则表达式支持LIKE所允许的一切,甚至更多,但其语法完全不同.然而,由于LIKE的规则非常简单(其中%表示零个或多个字符,_表示一个字符),并且LIKE个参数和正则表达式都是用字符串表示的,因此我们可以创建一个正则表达式,它接受LIKE个参数(例如abc_ef% *usd),并将其转换为等价的正则表达式(例如\Aabc.ef.* \*usd\z):

@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch).Replace('_', '.').Replace("%", ".*") + @"\z"

基于此,我们可以构建一个Like()方法:

public static class MyStringExtensions
{
  public static bool Like(this string toSearch, string toFind)
  {
    return new Regex(@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch).Replace('_', '.').Replace("%", ".*") + @"\z", RegexOptions.Singleline).IsMatch(toSearch);
  }
}

因此:

bool willBeTrue = "abcdefg".Like("abcd_fg");
bool willAlsoBeTrue = "abcdefg".Like("ab%f%");
bool willBeFalse = "abcdefghi".Like("abcd_fg");

Sql相关问答推荐

Erlang 数据库加入关联

PostgresQL查询以计算一天内的时间间隔

SQL - 按订单条件分组

在没有明显分区列的情况下使用多个分区的 Spark 窗口

可变字符串问题

为基于另一个表的表中的每个条件选择前 n 个(变量)

ASP.NET ViewState vs Session,数据量大

Google BigQuery:UNNEST,每个不同的键都变成一列

大表上的查询速度非常慢,如何优化?

在 SQL Developer Oracle 中,如何在不使用 MAX、LIMIT 或 ORDER BY 的情况下在 Product 表中找到最贵的产品?

SQL:从多列的值中拆分行

删除名称错误的过程 (MSSQL)

选择具有特定值的重复行

循环表并更新特定列

应用 GROUP BY 后判断相同的数量

连接三个表并检索预期结果

视图是否自动更新

适用于所有(或大多数)数据库的高效 SQL 测试查询或验证查询

Sequelize ORM中连接表的条件

您可以从 influxdb 中删除数据吗?