C# 更换一部分绳子,同时保持其余的完整?

C# 更换一部分绳子,同时保持其余的完整?,c#,string,replace,substring,C#,String,Replace,Substring,我正在制作一个asp.net web应用程序(使用C#),允许用户复制/粘贴他们的文字,然后应用程序搜索内容,例如英国和美国的惯例 在英国,汽车发动机室盖被称为“发动机罩”,而在美国,它被称为“发动机罩”,因此,如果用户正在搜索基于美国的约定,程序将建议用户将单词从发动机罩改为发动机罩(用户可以使用单选按钮在英国或美国约定之间切换)。约定存储在数据库中 我的问题是它并不总是“bonnet”或“hood”,有时作者会使用“bonnets”或“hood”这样的词,所以最后加上“s”会完全改变这个词,

我正在制作一个asp.net web应用程序(使用C#),允许用户复制/粘贴他们的文字,然后应用程序搜索内容,例如英国和美国的惯例

在英国,汽车发动机室盖被称为“发动机罩”,而在美国,它被称为“发动机罩”,因此,如果用户正在搜索基于美国的约定,程序将建议用户将单词从发动机罩改为发动机罩(用户可以使用单选按钮在英国或美国约定之间切换)。约定存储在数据库中

我的问题是它并不总是“bonnet”或“hood”,有时作者会使用“bonnets”或“hood”这样的词,所以最后加上“s”会完全改变这个词,我怎么能在保持其余词不变的情况下改变实际词,例如,应该将bonnets改为hood(在改变实际词的同时保持“s”不变)?

谢谢。

试试这个

if(Convention=="UK")
{
  MyString = MyString.Replace("hood","bonnet");
}
else if(Convention=="US")
{
  MyString = MyString.Replace("bonnet","hood");
}

我假设您想要检测在钉刺之后/之前或结束/开始时带有空格的阀盖

然后我建议使用正则表达式

考虑一下这个正则表达式:
(?i)^(+)?(发动机罩)(s(+)?$

(?i)
表示不区分大小写

现在测试此代码:

string replacedText = Regex.Replace("ssdf bonnets sdf sdf sdf ", @"(?i)^(.+ )?(bonnet)(s?)( .+)?$", "$1hood$3$4");

我希望我帮助了
String.Replace()
?请注意,这不适用于两种语言中任何前缀/后缀都不相同的情况。不要查找空格-而是检查边界(
\b
),因为这些边界将匹配非单词字符,如
-
。还可以避免您在前后匹配内容(不包括复数“s”)。非常感谢Maziar Taheri,您的解决方案完全符合我的要求,String.Equals和String.Contains也可以,但效率不高,因为Equals不会查找“Pitch(es)”之类的词,因为“es”和“Contains”会查找不必要的词,如“cell”在Ex(cell)和ent之间,但正则表达式可以检测完美的子字符串,并且足够灵活,可以针对复数进行修改。再次感谢。还感谢马里奥的建议。