2014-09-24 96 views
1

我有以下輸入:正則表達式匹配整個詞或短語

Hewlett Packard LaserJet Printer Thingy

我需要以下的輸出:

LaserJet Printer Thingy

基於Hewlett Packard相匹配。

我相信這是一個正則表達式的完美人選(我可能是錯的),不幸的是,我的經驗有限,但是一系列的字符串分割和連接看起來很冗長。

我已經試過

return Regex.Replace(FullProductName, "\b" + ManufacturerName + "\b", string.Empty, RegexOptions.IgnoreCase); 

我發現這並不因爲\b工作指的是單詞邊界,但在這裏我一語。

注意:它有時可能是Sony或其他單字製造商名稱。

+0

是否要刪除製造商名稱?如何正則表達式知道哪一個是產品名稱,哪一個是製造商名稱? – 2014-09-24 13:17:16

+0

@AvinashRaj是 – 2014-09-24 13:17:36

+0

等等....它看起來像你有幾個製造商的名稱,你想要做的 - 從產品名稱中刪除製造商名稱。我對嗎? – 2014-09-24 13:17:54

回答

2

我不認爲你需要一個正則表達式。只需StartsWithRemove就足夠了。

string text = "Hewlett Packard LaserJet Printer Thingy"; 
string manufacturer = "Hewlett Packard"; 
if(text.StartsWith(manufacturer)) 
{ 
    var product = text.Remove(0, manufacturer.Length).TrimStart(); 
    //TrimStart used for trimming leading spaces 
} 
+0

只有在製造商已知的情況下,這纔有效。如果製造商是「索尼」或其他人,那麼OP會在問題中提到什麼? – 2014-09-24 13:34:37

+0

@sgk OP本身在他的Regex中使用'ManufacturerName',這意味着他知道產品名稱。好的,那麼我的問題是我們如何知道製造商是什麼?它可能是'索尼'或'索尼愛立信'。尋找製造商的算法是什麼?如果你回答這個問題,我會更新我的答案。 – 2014-09-24 13:38:08

+0

這就是我的觀點,除非有完整的製造商名單,否則無法爲所有制造商開展此項工作。 – 2014-09-24 13:48:01

3

您可以使用下面的正則表達式來匹配製造商名稱Hewlett Packard或任何其他單字製造商名稱。用空字符串替換匹配的字符串會給你所需的輸出。

正則表達式:

^(Hewlett Packard\s*|[A-Z][a-z]+\s*) 

替換字符串:

Empty string 

DEMO

代碼:

string str = @"Hewlett Packard LaserJet Printer Thingy 
Sony LaserJet Printer Thingy"; 
string result = Regex.Replace(str, @"(?m)^(Hewlett Packard\s*|[A-Z][a-z]+\s*)", ""); 
Console.WriteLine(result); 
Console.ReadLine(); 

IDEONE

+0

非常感謝您的回答,它已經教會了我一些關於Regex的知識。不幸的是,我正在大量思考這個問題。所以其他答案可能是最合適的。 – 2014-09-24 13:51:18