我有这个:
string input = @"(+order: top* OR +order: first* OR +order: second* OR +order: third* OR +order: ""fourth top"" OR +order: fifth*)";
我需要获得一个正则表达式,从上面提取如下:
“top,first,second,third,4th top,5th”
我做了这个
public static string GetOrders(string input)
{
string pattern = @"order(.*)OR";
List<string> orders = new List<string>();
foreach (Match m in Regex.Matches(input, pattern))
orders.Add(m.Value);
return string.Join(", ", orders.ToArray());
}
我的正则表达式模式不完整。我以为我可以在“+ order:”和“OR”之间提取所有内容,但它不起作用。它似乎没有迭代元素,我只是得到整个输入字符串。
我做错了什么?
答案 0 :(得分:3)
.*
贪婪,从第一个order
到最后一个OR
匹配。
@"order(.*?)OR"
只能用于前四场比赛;第五个跟不是OR
。
所以一个更好的正则表达式
@"order:\s*(.*?)\s*(?:OR|\))"
更好(假设规则是“参数不包含空格并以*
结尾,或者它包含空格并包含在"
s”中:
@"(?<=order:\s*)(?:""[^""]*""|[^""*\s]*)"