C# 正则表达式匹配整个单词或短语

C# 正则表达式匹配整个单词或短语,c#,regex,string,C#,Regex,String,我有以下意见: Hewlett-Packard LaserJet打印机装置 我需要以下输出: LaserJet打印机装置 基于正在匹配的惠普 我相信这是正则表达式的完美候选(我可能错了),不幸的是,我在正则表达式方面的经验有限,但一系列字符串拆分和连接似乎很冗长 我尝试过的 return Regex.Replace(FullProductName, "\b" + ManufacturerName + "\b", string.Empty, RegexOptions.IgnoreCase); 我

我有以下意见:

Hewlett-Packard LaserJet打印机装置

我需要以下输出:

LaserJet打印机装置

基于正在匹配的惠普

我相信这是正则表达式的完美候选(我可能错了),不幸的是,我在正则表达式方面的经验有限,但一系列字符串拆分和连接似乎很冗长

我尝试过的

return Regex.Replace(FullProductName, "\b" + ManufacturerName + "\b", string.Empty, RegexOptions.IgnoreCase);
我发现这不起作用,因为
\b
指的是单词边界,但这里我有一个短语


注意:有时可能是索尼或其他单字制造商名称。

您可以使用下面的正则表达式来匹配制造商名称
Hewlett-Packard
或任何其他单字制造商名称。用空字符串替换匹配的字符串将获得所需的输出

正则表达式:

^(Hewlett Packard\s*|[A-Z][a-z]+\s*)
替换字符串:

Empty string

代码:

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();

您可以使用下面的正则表达式来匹配制造商名称
Hewlett-Packard
或任何其他单字制造商名称。用空字符串替换匹配的字符串将获得所需的输出

正则表达式:

^(Hewlett Packard\s*|[A-Z][a-z]+\s*)
替换字符串:

Empty string

代码:

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();

我想你不需要正则表达式。只要用
启动
删除
就足够了

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
}

我认为你不需要正则表达式。只要用
启动
删除
就足够了

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
}


是否要删除制造商名称?regex如何知道哪个是产品名称,哪个是制造商名称?你是说这个?制造商名称总是出现在第一个位置吗?@AvinashRaj-这很正确。这难道不像检查
String.StartsWith(manufacturer)
,然后检查
String.Remove(0,manufacturer.Length)
?@DeeMac String那么简单吗?如果只想删除字符串的第一部分,则替换不需要任何拆分或联接。您可以简单地称为“Hewlett-Packard LaserJet Printer Thingy”。替换(“Hewlett-Packard”,即“Hewlett-Packard”)。退一步说,对于每一个制造商,你都需要这样做。但是您不需要拆分和联接字符串。是否要删除制造商名称?regex如何知道哪个是产品名称,哪个是制造商名称?你是说这个?制造商名称总是出现在第一个位置吗?@AvinashRaj-这很正确。这难道不像检查
String.StartsWith(manufacturer)
,然后检查
String.Remove(0,manufacturer.Length)
?@DeeMac String那么简单吗?如果只想删除字符串的第一部分,则替换不需要任何拆分或联接。您可以简单地称为“Hewlett-Packard LaserJet Printer Thingy”。替换(“Hewlett-Packard”,即“Hewlett-Packard”)。退一步说,对于每一个制造商,你都需要这样做。但是您不需要拆分和连接字符串。只有在知道制造商的情况下,这才有效。如果制造商是“索尼”或OP在问题中提到的其他制造商,该怎么办?@sgk OP本身在其正则表达式中使用
ManufacturerName
,这意味着他预先知道产品名称。好的,那么我的问题是我们如何知道什么是制造商?它可以是
索尼
索尼爱立信
。找到制造商的算法是什么?如果你回答这个问题,我会更新我的答案。这是我的全部观点,除非有一个完整的制造商列表,否则没有办法让所有制造商都这么做。非常感谢@SriramSakthivel。我仔细考虑了这个问题。这是非常正确的。我不确定我是否理解您在这里的意思sgk。@DeeMac假设您直接从设备或其他来源获得完整的设备名称(制造商名称+设备名称),除非您将其与完整的制造商列表进行比较,否则无法从全名中删除制造商名称。但是如果你事先知道制造商的名字,那么上面的答案肯定会有用。或者更简单地说,您甚至可以使用
string deviceName=fullName.Replace(manufacturerName,string.Empty)
这将仅在知道制造商的情况下起作用。如果制造商是“索尼”或OP在问题中提到的其他制造商,该怎么办?@sgk OP本身在其正则表达式中使用
ManufacturerName
,这意味着他预先知道产品名称。好的,那么我的问题是我们如何知道什么是制造商?它可以是
索尼
索尼爱立信
。找到制造商的算法是什么?如果你回答这个问题,我会更新我的答案。这是我的全部观点,除非有一个完整的制造商列表,否则没有办法让所有制造商都这么做。非常感谢@SriramSakthivel。我仔细考虑了这个问题。这是非常正确的。我不确定我是否理解您在这里的意思sgk。@DeeMac假设您直接从设备或其他来源获得完整的设备名称(制造商名称+设备名称),除非您将其与完整的制造商列表进行比较,否则无法从全名中删除制造商名称。但是如果你事先知道制造商的名字,那么上面的答案肯定会有用。或者更简单地说,您甚至可以使用
string deviceName=fullName.Replace(manufacturerName,string.Empty)
非常感谢您的回答,它已经教会了我一些关于Regex的知识。不幸的是,我想得太多了。所以另一个答案可能是最合适的。非常感谢你的回答,它已经教会了我一些关于正则表达式的知识。不幸的是,我想得太多了。因此,另一个答案可能是最合适的。