.net - 正则表达式获取匹配列表

标签 .net regex pattern-matching

我有这个:

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/

相关文章:

c# - 为什么使用除法而不是通用哈希法计算哈希码?

Python - 在字符串中定位正则表达式匹配的位置?

c# - C# 中 anchor html 标记的正则表达式?

macros - 如何使用重复创建带有可选参数的 Rust 宏?

Python 在文本字符串中查找值

.net - 以管理员身份运行 .NET 应用程序

c# - 在 C# 中使用析构函数?

regex - 正则表达式或 LIKE 模式的转义函数

c# - C#部署的安装问题

python - 如何匹配 Python 正则表达式中的开始和结束?