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 输入 - 型号:“Samsung 250”类别:“Mobile Accessories” ABC XYZ 输出 - Samsung 250、Mobile Accessories 和 ABC XYZ

示例 3 输入 - ABC XYZ 输出 - ABC XYZ

示例 4 输入 - 型号:“Samsung 250” ABC XYZ 输出 - Samsung 250 和 ABC XYZ

4

3 回答 3

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
于 2009-11-23T12:49:43.143 回答
1

如果您实际上是在尝试查找显式字符串,则IndexOf方法将为您工作(例如:s.IndexOf("ABC XYZ"))。

您显示的语法看起来有点像 field:"value" 语法,所以也许您想要一个正则表达式,如 "([az]+):\"([^"]+)\"" (应该匹配字段和成对的价值)。

如果那不是你想要的对不起,但问题有点含糊。

于 2009-11-23T12:26:18.807 回答
1

至于模型和类别,您可以使用以下方法捕获它们:

类别:“([^”]*)“

This searches for the string category:" followed by a your category (which assumbly can change, followed by another ". Of course, in c# this should be escaped: @"category:""([^""]*)""".
Similarity, you can extract the Model: Model:"([^"]*)".

Not sure about the rest, but if you remove these two, you are left with the free string.

于 2009-11-23T12:27:04.793 回答