需要一种更好的方法来删除字符串中的模式
本文关键字:方法 删除 字符串 模式 更好 一种 | 更新日期: 2023-09-27 17:50:44
我有一个方法来删除描述词的基础上的字符串,但我相信有更有效的方法来做到这一点。
iMonster
可以是fat或c rogue,我想去掉fat。
private static string[] _adjectives = { "angry",
"big",
"fat",
"happy",
"large",
"nasty",
"fierce",
"thin",
"small",
"tall",
"short" };
private static string RemoveMonsterAdjective(string iMonster)
{
foreach (string adjective in _adjectives)
{
if (iMonster.Contains(adjective))
{
iMonster = iMonster.Replace(adjective, "").Trim();
break;
}
}
return iMonster;
}
希望有人能帮助我。
您可以使用正则表达式在单个调用中完成所有替换,如下所示:
return Regex.Replace(
iMonster,
@"'b(angry|big|fat|happy|...)'b",
""
).Trim();
这种方法背后的思想是构造一个正则表达式,将任何形容词作为单个单词匹配(因此"bigot"将不匹配,而"big"将匹配),并用空字符串替换该单词。
另一个可能的简短解决方案是:
var words = iMonster.Split(' ');
return string.Join(" ", words.Except(_adjectives));
我已经做了一些分析并比较了各种解决方案。
输入fat angry orc happy rogue
和1000000次迭代:
00:00:01.8457067 lakedoo
00:00:01.9772477 Eve
00:00:04.3859120 dasblinkenlight
需要提到的是,我调整了dasblinkenlight的解决方案,使所有的形容词都在正则表达式中。
编辑:修正lakedoo的方法,去掉break