2014-09-24 62 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