2009-11-23 236 views
0

我有以下的搜索短語,我需要無論什麼時候出現,以提取正則表達式來提取搜索詞搜索詞

  1. ABC XYZ
  2. 手機配件
  3. 三星250

在任何順序的字符串中。該應用程序是C#.Net。

Search Phrase 
__________________________________________________________ 
ABC XYZ 
ABC XYZ category:"Mobile Accessories" 
category:"Mobile Accessories" ABC XYZ 
ABC XYZ Model:"Samsung 250" 
Model:"Samsung 250" ABC XYZ 
ABC XYZ category:"Mobile Accessories" Model:"Samsung 250" 
Model:"Samsung 250" category:"Mobile Accessories" ABC XYZ 
category:"Mobile Accessories" Model:"Samsung 250" ABC XYZ 
__________________________________________________________ 

在此先感謝。

實施例1 輸入 - ABC XYZ類別: 「移動附件」 輸出 - ABC XYZ和移動配件

實施例2 輸入 - 型號: 「三星250」 類別: 「移動附件」 ABC XYZ 輸出 - 三星250,移動附件和ABC XYZ

實施例3 輸入 - ABC XYZ 輸出 - ABC XYZ

實施例4 輸入 - 莫del:「Samsung 250」ABC XYZ 輸出 - Samsung 250和ABC XYZ

+1

對不起,那是沒有意義的。嘗試顯示您的實際輸入和預期輸出的片段。 – Kobi 2009-11-23 12:11:48

回答

1

如果您字面上試圖找到明確的字符串,IndexOf方法將適用於您(EG:s.IndexOf(「ABC XYZ」)) )。你可能想要一個像「([az] +)」的正則表達式:\「([^」] +)\「」(其中應該匹配出對字段和值)。

如果不是你以後後悔是什麼,但問題是有點含糊。

+0

不錯的一個。與IndexOf好點。我假設操作系統想要像示例中那樣提取特定的鍵,但是您的想法同樣有效。 +1。 – Kobi 2009-11-23 12:31:30

1

至於型號和類別,你可以使用類似的東西捕捉他們:

 
category:"([^"]*)" 

這搜索字符串category:"後跟一個你的類別(哪個assu可能會改變,接下來是另一個"。當然,在c#中這個應該會被轉義:@"category:""([^""]*)"""
相似度,你可以提取模型:Model:"([^"]*)"

不知道其餘的,但如果你刪除這兩個,你留下的空閒字符串。

+0

你能讓我知道如何排除這兩個,這樣我就可以留下剩餘的空閒字符串。 – SednaSystems 2009-11-23 12:32:37

+0

您可以使用'Regex.Replace'來刪除匹配的字符串或所有'key:「value」'對,如@fyjham所示。這給你三個要求三個值,這並不是很糟糕。 – Kobi 2009-11-23 12:39:34

+0

您還可以選擇迭代從正則表達式匹配返回的Match.Group,並將每個匹配的Index和Length屬性與SubString結合使用,以拔出不匹配的內容。無論你是否願意這樣做,都將取決於你的正則表達式的性能密集程度(如果你期望這樣的調用非常頻繁,但需要更多的代碼,這會比更多的正則表達式提供更好的性能)。 – fyjham 2009-11-23 13:05:40

1

看起來好像你想從同一個字符串中提取幾個不同的模式。一個 的方法是找到每個匹配,然後將其從工作字符串中刪除。

實施例:

String workingstring = "ABC XYZ category:\"Mobile Accessories\""; 

Regex categoryMatch("category:\"([^\"]+)\""); 
Regex modelMatch("model:\"([^\"]+)\""); 

String category = categoryMatch.Match(workingstring); 
String model = modelMatch.Match(workingstring); 

workingstring = Regex.Replace(workingstring, categoryMatch, ""); 
workingstring = Regex.Replace(workingstring, modelMatch, ""); 

String name = workingstring; //I assume that the extra data is the name 

這將提取的類別,型號及名稱無論字符串的格式。你應該注意到,畸形字符串,例如:

ABC Model:"Samsung 250" XYZ 

返回結果:

ABC XYZ 
相關問題