如何更改正则表达式以处理_符号后的数字?

时间:2016-07-15 10:01:10

标签: c# regex

我想要一个可以匹配以下名称的正则表达式:

Standard_DS1_v2 Standard_DS2_v2 ... Standard_DS15_v2

Standard_DS1 Standard_DS2 ... Standard_DS14

Standard_GS1 Standard_GS2 ... Standard_GS5

现在我有以下正则表达式:

private const string PremiumStorageRoleSizesRegex = @"^Standard_((DS)|(GS))\d+$";

machineSizeMetadatas = machineSizeMetadatas.Where(metadata => Regex.IsMatch(metadata.Name, PremiumStorageRoleSizesRegex));

但我不知道如何处理第一个序列(Standard_DS1_v2)。

如何更改正则表达式?

1 个答案:

答案 0 :(得分:2)

您可以将此正则表达式与可选组一起使用:

^Standard_(DS|GS)\d+(?:_v\d+)?$
                    ^^^^^^^^^^

或者更简单^Standard_[DG]S\d+(?:_v\d+)?$以避免交替组。请参阅regex demo

您可以在任何需要的地方添加捕获组。

模式详情

  • ^ - 字符串开头
  • Standard_ - 文字Standard_子字符串
  • (DS|GS) - DSGS字符串(您可以将其替换为[DG]S
  • \d+ - 一位或多位
  • (?:_v\d+)? - _ + v + 1个或多个数字的1或0(=可选)序列
  • $ - 字符串结束。