2012-04-24 63 views
6

我正在尋找在C#中使用正則表達式來搜索術語,我想在搜索中包含這些術語的複數。例如,如果用戶想要搜索'pipe',那麼我想返回'pipes'的結果。在C中使用正則表達式匹配複數#

因此,我可以做到這一點...

string s ="\\b" + term + "s*\\b"; 
if (Regex.IsMatch(bigtext, s) { /* do stuff */ } 

我將如何修改上面讓我配合,比如說,「強調」當用戶輸入「壓力」和「管」仍能正常工作/ '管'?

+1

瑟吉 - 我把我的頭埋在恥辱中......我會重溫我的舊問題並整理出來! sch - 不會太在意英國允許的古怪事情......我認爲把所有這些都歸入一個非常項目。 – SAL 2012-04-24 11:47:07

回答

1

下面是創建刪除複數正則表達式:

/(?<![aei])([ie][d])(?=[^a-zA-Z])|(?<=[ertkgwmnl])s(?=[^a-zA-Z])/g 

Demo & source

我知道這是不是正是你需要的,但它可以幫助你找到的東西出來。

+0

謝謝ThdK - http://gskinner.com/RegExr/是測試正則表達式的絕妙方法。 – SAL 2012-04-24 11:50:06

+0

我剛剛發現它,以前從未聽說過它。它已經有很多完美的正則表達式由社區創建,如果它們不是你想要的,你可以隨時修改它們:) – ThdK 2012-04-24 11:56:42

+1

玩這些:http://www.english-zone。 com/spelling/plurals.html – 2012-04-24 13:15:09

0

如果您使用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距離算法。

+0

歡迎來到堆棧溢出!如何通過你所建議的技術實例的形式爲你的答案提供更多實質內容? – 2012-04-24 14:30:00

7

您可以面對的問題是,有很多不規則名詞,如manfishindex。所以你應該考慮使用具有Pluralize方法的PluralizationServiceHere是一個示例,顯示如何使用它。

當你得到複數的術語後,你可以很容易地構造一個正則表達式來搜索複數或單數術語。

PluralizationService ps = PluralizationService.CreateService(CultureInfo.CurrentCulture); 
string plural = ps.Pluralize(term); 
string s = @"("+term+"|"+plural+")"; 
if (Regex.IsMatch(bigtext, s)) { 
    /* do stuff */ 
} 
+0

這在處理不同文化時尤爲重要!我不認爲有(或應該是)一個傳奇的正則表達式。 – 2014-10-21 04:28:15