我正在尋找在C#中使用正則表達式來搜索術語,我想在搜索中包含這些術語的複數。例如,如果用戶想要搜索'pipe',那麼我想返回'pipes'的結果。在C中使用正則表達式匹配複數#
因此,我可以做到這一點...
string s ="\\b" + term + "s*\\b";
if (Regex.IsMatch(bigtext, s) { /* do stuff */ }
我將如何修改上面讓我配合,比如說,「強調」當用戶輸入「壓力」和「管」仍能正常工作/ '管'?
我正在尋找在C#中使用正則表達式來搜索術語,我想在搜索中包含這些術語的複數。例如,如果用戶想要搜索'pipe',那麼我想返回'pipes'的結果。在C中使用正則表達式匹配複數#
因此,我可以做到這一點...
string s ="\\b" + term + "s*\\b";
if (Regex.IsMatch(bigtext, s) { /* do stuff */ }
我將如何修改上面讓我配合,比如說,「強調」當用戶輸入「壓力」和「管」仍能正常工作/ '管'?
下面是創建刪除複數正則表達式:
/(?<![aei])([ie][d])(?=[^a-zA-Z])|(?<=[ertkgwmnl])s(?=[^a-zA-Z])/g
我知道這是不是正是你需要的,但它可以幫助你找到的東西出來。
如果您使用SQL服務器作爲您的後端,您不能使用Soundex?我不確定你想要搜索的內容。我假設你正在嘗試創建動態SQL作爲搜索輸入。如果沒有,我認爲有LINQ的SoundEx。
編輯:我站在更正,它似乎有一些linq sql實體的東西,可以爲SoundEx完成。
但是,MSDN確實有一個soundex示例,對於我今天上午運行的簡單測試,似乎做得很好,就我所測試的結果而言。 http://msdn.microsoft.com/en-us/library/bb669073.aspx
我所作的變化是代替.ToUpper的(不變的)我用.ToUpperInvariant()和而不是傳遞(串字)1中使用的擴展方法(這串字)
下面是一個例子什麼我跑
List<string> animals = new List<string>();
animals.Add("dogs");
animals.Add("dog");
animals.Add("cat");
animals.Add("rabbits");
animals.Add("doggie");
string dog = "dog";
var data = from animal in animals
where animal.SoundEx() == dog.SoundEx()
select animal;
數據:狗,狗,小狗
現在有了SQL服務器,使用包含/ FreeText的/ CONTAINSTABLE等使用的SoundEx對目錄(我不熟悉的NE更新版本的SQL服務器 - 回到我用過的SQLServer 2000實現),你也可以對結果進行排名。
此外,如果有使用SQL Server你可能要考慮這個選項的能力: LINQ to SQL SOUNDEX - possible?
與多元化解決方案的關注,你必須能夠利用.NET 4
還有可能有用的Levenshtein距離算法。
歡迎來到堆棧溢出!如何通過你所建議的技術實例的形式爲你的答案提供更多實質內容? – 2012-04-24 14:30:00
您可以面對的問題是,有很多不規則名詞,如man
,fish
和index
。所以你應該考慮使用具有Pluralize
方法的PluralizationService
。 Here是一個示例,顯示如何使用它。
當你得到複數的術語後,你可以很容易地構造一個正則表達式來搜索複數或單數術語。
PluralizationService ps = PluralizationService.CreateService(CultureInfo.CurrentCulture);
string plural = ps.Pluralize(term);
string s = @"("+term+"|"+plural+")";
if (Regex.IsMatch(bigtext, s)) {
/* do stuff */
}
這在處理不同文化時尤爲重要!我不認爲有(或應該是)一個傳奇的正則表達式。 – 2014-10-21 04:28:15
瑟吉 - 我把我的頭埋在恥辱中......我會重溫我的舊問題並整理出來! sch - 不會太在意英國允許的古怪事情......我認爲把所有這些都歸入一個非常項目。 – SAL 2012-04-24 11:47:07