2009-11-23 590 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 
相关问题