我有这个:
string input = @"(+order: top* OR +order: first* OR +order: second* OR +order: third* OR +order: ""fourth top"" OR +order: fifth*)";
我需要获取一个从上面提取的正则表达式,如下所示:
"top, first, second, third, fourth top, fifth"
这是我做的
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”之间的所有内容,但它不起作用。它似乎没有迭代元素,我只是获取整个输入字符串。
我做错了什么?
最佳答案
.*
是贪婪的,从第一个 order
到最后一个 OR
进行匹配。
@"order(.*?)OR"
可以工作,但仅适用于前四场比赛;第五个后面没有 OR
。
所以更好的正则表达式是
@"order:\s*(.*?)\s*(?:OR|\))"
更好(假设规则是“参数不包含空格并以 *
结尾,或者包含空格并包含在 "
s"中):
@"(?<=order:\s*)(?:""[^""]*""|[^""*\s]*)"
关于.net - 正则表达式获取匹配列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478448/