【问题标题】:regex get list of matches正则表达式获取匹配列表
【发布时间】:2013-01-23 11:19:53
【问题描述】:

我有这个:

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”之间的所有内容,但它不起作用。它似乎没有迭代元素,我只是得到了整个输入字符串。

我做错了什么?

【问题讨论】:

  • 使.不贪婪:"order(.*?)OR"

标签: .net regex pattern-matching


【解决方案1】:

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

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

所以一个更好的正则表达式应该是

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

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

@"(?<=order:\s*)(?:""[^""]*""|[^""*\s]*)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多