在正则表达式捕获组中执行OR

时间:2018-05-03 05:20:11

标签: c# .net regex

如果value包含digits或匹配模式[lookup('key')]key可以是任何字符串,我希望匹配。

在自己的作品中使用任何一种模式。例如,这有效。

string value = "[lookup('anykey')]";

if (!Regex.IsMatch(value, "^\\[(lookup)\\(.*\\)\\]$"))
   {
       Console.WriteLine("no match");
   }

我无法同时使用单个正则表达式。

if (!Regex.IsMatch(value, "((\\d+) | (\\[(parameter)\\(.*\\)\\]))"))
   {
       Console.WriteLine("no match");
   }

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在你的正则表达式中你应该删除空格,试试:

\d+|\[lookup\('[^']+'\)\]

答案 1 :(得分:0)

首先,无论何时我在c#中使用正则表达式,或者对于任何具有需要转义的字符的字符串,我都在字符串前加上“@”符号,这使我免于使用双重转义:)...我发现它

更容易

现在回答,这是我认为你正在寻找的

static void Main(string[] args)
    {
        //string value = "[lookup('BlahBlah')]";
        string value = "789897";
        Match m = Regex.Match(value, @"((\d+)|(\[lookup\(\'([^\']+)\'\)\]))") ;
        if (m.Success)
        {
            string num = m.Groups[2].Value;
            string key = m.Groups[4].Value;
        } 
    }

注意字符串是如何用'@'符号作为前缀的,我不必为符号\使用双转义符。 由于我们使用了这么多的括号,我们总共有5个组,如果你想要数字,那么你取第1组的值,如果你想要键,你取第4组的值。如果'num'是空的字符串,表示没有提供数字等... 希望有所帮助.....