【问题标题】:Replacing a part of string while keeping the rest intact?在保持其余部分完好无损的同时更换部分字符串?
【发布时间】:2011-09-16 06:14:53
【问题描述】:

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

在英国汽车发动机舱盖称为“bonnet”,而在美国则称为“hood”,因此如果用户正在搜索基于美国的公约(用户可以使用单选按钮在英国或美国公约之间切换)。约定存储在数据库中。

我的问题是,有时作者使用“bonnets”或“hoods”之类的词并不总是“bonnet”或“hoods”,所以最后添加“s”会完全改变这个词,我该如何改变实际单词,同时保持其余部分完整,例如应该将帽子改为引擎盖(在更改实际单词的同时保持 's' 完整)?

谢谢。

【问题讨论】:

  • String.Replace()?请注意,这不适用于两种语言中任何前/后缀都不相同的情况。

标签: c# string replace substring


【解决方案1】:

我假设您想检测在刺痛之后/之前或结束/开始时带有空格的发动机罩。

那么我建议使用正则表达式。

考虑这个正则表达式: (?i)^(.+ )?(bonnet)(s?)( .+)?$

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

现在测试这段代码:

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

希望能帮到你

【讨论】:

  • 不要寻找空格 - 检查边界 (\b),因为它们也会匹配非单词字符,如 ,-。还将使您免于匹配之前/之后的内容(不包括复数“s”)。
  • 非常感谢 Maziar Taheri,您的解决方案完全符合我的要求,String.Equals 和 String.Contains 也能正常工作,但效率不高,因为 Equals 不会寻找像“Pitch(es)”这样的词" 因为 "es" 和 contains 会在 Ex(cell)ent 之间找到不必要的词,例如 "cell",但正则表达式检测完美的子字符串,并且足够灵活,可以修改复数形式。再次感谢。还要感谢马里奥的边界建议。
【解决方案2】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2021-11-24
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多