C# 需要更好的方法删除字符串中的模式吗

C# 需要更好的方法删除字符串中的模式吗,c#,string,foreach,arrays,C#,String,Foreach,Arrays,我有一种方法可以删除基于字符串的描述词,但我相信有更有效的方法可以做到这一点 iMonster的iMonster可以像肥肉兽人盗贼一样,我想移除肥肉 希望有人能帮助我。提前感谢。您可以使用正则表达式在一次调用中完成所有替换,如下所示: return Regex.Replace( iMonster, @"\b(angry|big|fat|happy|...)\b", "" ).Trim(); 这种方法背后的思想是构造一个正则表达式,将任何形容词匹配为单个单词(因此“big

我有一种方法可以删除基于字符串的描述词,但我相信有更有效的方法可以做到这一点

iMonster的
iMonster
可以像肥肉兽人盗贼一样,我想移除肥肉


希望有人能帮助我。提前感谢。

您可以使用正则表达式在一次调用中完成所有替换,如下所示:

return Regex.Replace(
    iMonster,
    @"\b(angry|big|fat|happy|...)\b",
    ""
).Trim();
这种方法背后的思想是构造一个正则表达式,将任何形容词匹配为单个单词(因此“bigot”将不匹配,而“big”将匹配),并用空字符串替换该单词


下面是一个示例。

您可以使用正则表达式在一次调用中进行所有替换,如下所示:

return Regex.Replace(
    iMonster,
    @"\b(angry|big|fat|happy|...)\b",
    ""
).Trim();
这种方法背后的思想是构造一个正则表达式,将任何形容词匹配为单个单词(因此“bigot”将不匹配,而“big”将匹配),并用空字符串替换该单词


下面是一个解决方案。

另一个可能的简短解决方案是:

var words = iMonster.Split(' ');
return string.Join(" ", words.Except(_adjectives));
我做了一些分析并比较了各种解决方案

输入<代码>肥胖愤怒兽人快乐盗贼和1000000次迭代:

00:00:01.8457067 lakedoo
00:00:01.9772477 Eve
00:00:04.3859120 dasblinkenlight
需要提到的是,我修改了dasblinkenlight的解决方案,使正则表达式中的所有形容词都有


编辑:通过消除中断纠正了lakedoo的方法。

另一个可能的简短解决方案是:

var words = iMonster.Split(' ');
return string.Join(" ", words.Except(_adjectives));
我做了一些分析并比较了各种解决方案

输入<代码>肥胖愤怒兽人快乐盗贼和1000000次迭代:

00:00:01.8457067 lakedoo
00:00:01.9772477 Eve
00:00:04.3859120 dasblinkenlight
需要提到的是,我修改了dasblinkenlight的解决方案,使正则表达式中的所有形容词都有



编辑:通过删除断点更正了lakedoo的方法。

看起来还可以。这真的是你的瓶颈吗?你的代码看起来不错。只有一件事:由于
中断
的原因,如果imonster是一个“肥硕肮脏的兽人流氓”,那么你将得到“肥硕肮脏的兽人流氓”。@lakedoo只要你管理你的
形容词
数组,就可以了。但是您需要一种方法来限制多个
形容词
,比如删除多个分隔符;)+1@nemesvthanks,关于多个形容词的观点很好,我会解决这个问题。(只有在删除break时才相关)String是不可变的,所以如果iMonster很大,而_形容词很大,并且可能导致多次点击,那么使用StringBuilder或StringBuffer可能有助于产生严重变异的结果。虽然这会增加复杂性。看起来还可以。这真的是你的瓶颈吗?你的代码看起来不错。只有一件事:由于
中断
的原因,如果imonster是一个“肥硕肮脏的兽人流氓”,那么你将得到“肥硕肮脏的兽人流氓”。@lakedoo只要你管理你的
形容词
数组,就可以了。但是您需要一种方法来限制多个
形容词
,比如删除多个分隔符;)+1@nemesvthanks,关于多个形容词的观点很好,我会解决这个问题。(只有在删除break时才相关)String是不可变的,所以如果iMonster很大,而_形容词很大,并且可能导致多次点击,那么使用StringBuilder或StringBuffer可能有助于产生严重变异的结果。虽然这会增加复杂性,但我很想看看这方面的基准测试和循环字符串.Replace。我猜想,随着输入变得更长,包含更多的形容词,正则表达式将克服其初始开销,并以更快的速度结束(更少的重新分配)words@lazyberezovsky很公平似乎正则表达式虽然简单,但即使对于长字符串也要慢一些:我想看看它的基准和循环字符串.Replace。我猜想,随着输入变得更长,包含更多的形容词,正则表达式将克服其初始开销,并以更快的速度结束(更少的重新分配)words@lazyberezovsky很公平似乎正则表达式虽然更简单,但对于长字符串来说速度也较慢: