匹配字符串中的模式

时间:2017-07-27 09:08:57

标签: c# regex

我有一个字符串

string str = "I am fine. How are you? You need exactly 4 pieces of sandwiches. Your ADAST Count  is  5. Okay thank you ";

我想要的是,获取ADAST计数值。对于上面的示例,它是5

问题在于is之后的ADAST Count。它可以是is=。但是会有两个词ADAST Count

我试过的是

var resultString = Regex.Match(str, @"ADAST\s+count\s+is\s+\d+", RegexOptions.IgnoreCase).Value;
var number = Regex.Match(resultString, @"\d+").Value;

如何编写搜索is=的模式?

1 个答案:

答案 0 :(得分:2)

您可以使用

ADAST\s+count\s+(?:is|=)\s+(\d+)

请参阅regex demo

请注意,(?:is|=)non-capturing group(即,它仅用于对替换进行分组而不将这些子匹配推送到捕获堆栈以进一步检索)并且|是{{3} }}

<强>详情:

  • ADAST - 文字字符串
  • \s+ - 一个或多个空格
  • count - 文字字符串
  • \s+ - 一个或多个空格
    • (?:is|=) - is=
  • \s+ - 一个或多个空格
  • (\d+) - 第1组捕获一个或多个数字

C#:

var m = Regex.Match(s, @"ADAST\s+count\s+(?:is|=)\s+(\d+)", RegexOptions.IgnoreCase);
if (m.Success) {
    Console.Write(m.Groups[1].Value);
}