2011-06-16 27 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"); 
} 
相關問題