我有以下搜索短语,我需要提取
每当它们以任何顺序出现在字符串中时。该应用程序是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
答案 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