2

我有这个:

string input = @"(+order: top* OR +order: first* OR +order: second* OR +order: third* OR +order: ""fourth top"" OR +order: 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”之间的所有内容,但它不起作用。它似乎没有迭代元素,我只是得到了整个输入字符串。

我究竟做错了什么?

4

1 回答 1

3

.*是贪心的,从第一个匹配order到最后一个OR

@"order(.*?)OR"可以,但只适用于前四场比赛;第五个后面没有OR

所以更好的正则表达式是

@"order:\s*(.*?)\s*(?:OR|\))"

更好(假设规则是“参数不包含空格并以 结尾*,或者包含空格并包含在"s 中”):

@"(?<=order:\s*)(?:""[^""]*""|[^""*\s]*)"
于 2013-01-23T11:21:41.777 回答