正则表达式在搜索词组中提取搜索词

时间:2009-11-23 12:06:50

标签: c# regex search phrase

我有以下搜索短语,我需要提取

  1. ABC XYZ
  2. 手机配件
  3. Samsung 250
  4. 每当它们以任何顺序出现在字符串中时。该应用程序是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 输入 - 型号:“Samsung 250”ABC XYZ 输出 - 三星250和ABC XYZ

3 个答案:

答案 0 :(得分:1)

如果您真的试图找到明确的字符串,IndexOf方法将适合您(EG:s.IndexOf(“ABC XYZ”))。

你显示的语法有点像字段:“value”语法,所以也许你想要一个像“([az] +)的正则表达式:\”([^“] +)\”“(哪个应该成对匹配字段和值。)

如果那不是你抱歉的话,但问题有点模糊。

答案 1 :(得分:1)

对于模型和类别,您可以使用类似的东西捕获它们:

category:"([^"]*)"

这将搜索字符串category:",然后搜索您的类别(可能会更改,然后是另一个"。当然,在c#中,这应该被转义:@"category:""([^""]*)"""。<登记/> 相似性,您可以提取模型:Model:"([^"]*)"

不确定其余部分,但如果删除这两部分,则会留下自由字符串。

答案 2 :(得分: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