asp.net 如何为“componentStatusId==2”编写REGEX| 3、screeningOwnerId>0”

rwqw0loc  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(90)

需要从下面提到的字符串中获取三个字符串,需要C#和ASP.NET中的可能解决方案:

"componentStatusId==2|3,screeningOwnerId>0"

我需要使用C#中的正则表达式来获取'2','3'和'0'

h43kikqp

h43kikqp1#

如果你想要的只是一个字符串中的数字,那么你可以在下面的代码中使用正则表达式:

string re = "(?:\\b(\\d+)\\b[^\\d]*)+";
        Regex regex = new Regex(re);

        string input = "componentStatusId==2|3,screeningOwnerId>0";

        MatchCollection matches = regex.Matches(input);

        for (int ii = 0; ii < matches.Count; ii++)
        {
            Console.WriteLine("Match[{0}]  // of 0..{1}:", ii, matches.Count - 1);
            DisplayMatchResults(matches[ii]);
        }

函数DisplayMatchResults取自这个Stack Overflow答案。
上面的控制台输出是:

Match[0]  // of 0..0:
Match has 1 captures
  Group  0 has  1 captures '2|3,screeningOwnerId>0'
       Capture  0 '2|3,screeningOwnerId>0'
  Group  1 has  3 captures '0'
       Capture  0 '2'
       Capture  1 '3'
       Capture  2 '0'
    match.Groups[0].Value == "2|3,screeningOwnerId>0"
    match.Groups[1].Value == "0"
    match.Groups[0].Captures[0].Value == "2|3,screeningOwnerId>0"
    match.Groups[1].Captures[0].Value == "2"
    match.Groups[1].Captures[1].Value == "3"
    match.Groups[1].Captures[2].Value == "0"

因此,可以在match.Groups[1].Captures[...]中看到这些数字。
另一种可能性是使用Regex.Split,其中模式是“non digits”。下面代码的结果将需要后处理以删除空字符串。请注意,Regex.Split没有字符串Split方法的StringSplitOptions.RemoveEmptyEntries

string input = "componentStatusId==2|3,screeningOwnerId>0";
        string[] numbers = Regex.Split(input, "[^\\d]+");
        for (int ii = 0; ii < numbers.Length; ii++)
        {
            Console.WriteLine("{0}:  '{1}'", ii, numbers[ii]);
        }

输出结果是:

0:  ''
1:  '2'
2:  '34'
3:  '0'
ac1kyiln

ac1kyiln2#

使用以下正则表达式并从组1、2和3中捕获值。

componentStatusId==(\d+)\|(\d+),screeningOwnerId>(\d+)

Demo
为了将componentStatusIdscreeningOwnerId泛化为任意字符串,可以在正则表达式中使用\w+,使其更通用。

\w+==(\d+)\|(\d+),\w+>(\d+)

Updated Demo

相关问题