C# 在C中如何匹配条件#
我有一根这样的绳子C# 在C中如何匹配条件#,c#,regex,C#,Regex,我有一根这样的绳子 string strex = "Insert|Update|Delete" 我正在检索另一个字符串作为string strex1=“Insert”(它可能检索更新或删除) 我需要将C#中“IF”条件下的strex1与strex匹配 我是否需要拆分strex并与strex1匹配?我能想到的有效方法是使用 使用Linq、字符串strexby'|和检查strex1的解决方案是否存在于数组中,如 @PanagiotisKanavos在 评论 使用 或使用, 如
string strex = "Insert|Update|Delete"
我正在检索另一个字符串作为string strex1=“Insert”
(它可能检索更新或删除)
我需要将C#中“IF”条件下的strex1
与strex
匹配
我是否需要拆分
strex
并与strex1
匹配?我能想到的有效方法是使用
使用Linq、字符串
strex
by'|和检查strex1
的解决方案是否存在于数组中,如
@PanagiotisKanavos在
评论
使用
或使用,
如果要在比较字符串时忽略大小写,则可以使用StringComparison.OrdinalIgnoreCase
if(strex.Split('|').Any(x => x.Equals(strex1, StringComparison.OrdinalIgnoreCase))
{
//Your code goes here
}
您发布的字符串是与单词
插入
、更新
或删除
匹配的模式。正则表达式是web应用程序中指定验证规则的一种非常常见的方法
正则表达式可以表达比简单比较复杂得多的规则。在验证场景中,它们也比拆分快得多(想想10倍)。在web应用程序中,这意味着使用更少的服务器来服务相同的流量
您可以使用.NET将字符串与该模式匹配,例如:
var strex = "Insert|Update|Delete";
if (Regex.IsMatch(input,strex))
{
....
}
这将每次创建一个新的正则表达式对象。您可以通过创建一个静态Regex实例并重用它来避免这种情况。Regex是,这意味着从多个线程使用同一实例没有问题:
static Regex _cmdRegex = new Regex("Insert|Update|Delete");
...
void MyMethod(string input)
{
if(_cmdRegex.IsMatch(input))
{
...
}
}
如果模式出现在模式中的任何位置,则Regex类方法将匹配Regex.IsMatch(“Insert1”,strex)
将返回True
。如果需要精确匹配,则必须指定模式从输入的开头开始,以^
结尾,以$
结尾:
static Regex _cmdRegex = new Regex("^(Insert|Update|Delete)$");
通过此更改,\u cmdRegex.IsMatch(“Insert1”)
将返回false,但\u cmdRegex.IsMatch(“Insert”)
将返回true
性能
在这种情况下,正则表达式比拆分和尝试精确匹配快得多。随着时间的推移,考虑10-100倍。原因有两个:
Split()
这样的每个字符串修改操作都将生成新的临时字符串,这些字符串必须被分配和垃圾收集。在一个繁忙的web应用程序中,这会增加,最终会消耗大量的RAM和CPU,但几乎没有或根本没有任何好处。ASP.NET核心比旧ASP.NET快10倍的原因之一是尽可能消除了此类子字符串操作Split().Any()
时,程序会将输入与所有子字符串进行比较,即使很明显没有可能的匹配,例如因为第一个字母是Z
。另一方面,只有当第一个字符是I
、U
或D
这是非常低效的-它将在每个字符串中创建3个新字符串execution@PanagiotisKanavos,感谢您指出我代码中的低效之处。我在上一个解决方案中解决了您的问题,请检查它。代码现在根本不起作用。if(strex.Split(“|”).Any(x=>x==strex1))将是最好的解决方案,但我建议使用带有忽略大小写的equals方法,而不是在此处使用==。i、 e.if(strex.Split(“|”).Any(x=>x.Equals(strex1,System.StringComparison.OrdinalIgnoreCase)))谢谢Prasad。我试过你的密码。这也在起作用。谢谢你的帮助!
var strex = "Insert|Update|Delete";
if (Regex.IsMatch(input,strex))
{
....
}
static Regex _cmdRegex = new Regex("Insert|Update|Delete");
...
void MyMethod(string input)
{
if(_cmdRegex.IsMatch(input))
{
...
}
}
static Regex _cmdRegex = new Regex("^(Insert|Update|Delete)$");