2011-06-16 50 views
1

我正在制作一个允许用户复制/粘贴他们的文字,然后应用程序搜索英国和美国公约的内容的asp.net web应用程序(使用C#),例如更换字符串的一部分,同时保持其余的完整?

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

我的问题是它并不总是“引擎盖”或“引擎盖”,有时作家使用像“帽子”或“引擎盖”这样的词,所以最后加上's'完全改变了单词,我该如何改变在保持其他部分完好无损的情况下,保持完整的实际词汇,例如发动机罩应该变成罩盖(保持's'完好无损,同时改变实际的词汇)?

谢谢。

+0

'与string.replace()'?请注意,对于任何前后缀在两种语言中都不相同的情况,都不起作用。 – 2011-06-16 10:38:54

回答

0

我假设你想检测头盖(S)与空间/前或结束后/启动。

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

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

(?i)指不区分大小写,

现在测试该代码:

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

我希望我帮助

+1

不要寻找空格 - 检查边界('\ b'),而不是像''''''''等非字词字符。也可以避免你在匹配之前/之后的内容(不包括复数“s”)。 – Mario 2011-06-16 10:51:28

+0

非常感谢Maziar Taheri,你的解决方案完全按照我的意愿工作,String.Equals和String.Contains的工作效率也很高,但效率不高,因为Equals不会因为“es”而寻找像“Pitch(es)”这样的词,并且包含会在Ex(cell)ent之间找到像“cell”这样的不必要的单词,但是正则表达式检测完美的子串并且也足够灵活以被修改为复数。再次感谢。还要感谢Mario提供边界建议。 – Ahmed 2011-06-21 11:15:08

0

尝试的刺痛这

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