.net 与YYYYMM的值匹配的正则表达式

.net 与YYYYMM的值匹配的正则表达式,.net,regex,pattern-matching,.net,Regex,Pattern Matching,我需要一些符合以下模式的正则表达式.net:YYYYMM 其中: YYYY是介于2000年和2049年之间的一年 MM是介于01和12之间的一个月 我已经做了下面的一个,问题是它包含无效的月份值 [2]{1}[0]{1}[0-4]{1}[0-9]{1}[0-1]{1}[0-9]{1} 有什么建议吗?这应该有效:20[0-4]\d(0[1-9]| 1[0-2]) 要匹配一个月,您需要查找以下任一项: 一个0后跟[1-9]中的任何内容,或 一个1后跟[0-2] 如果要捕获年份和月份,(20

我需要一些符合以下模式的正则表达式.netYYYYMM

其中:

  • YYYY是介于2000年和2049年之间的一年
  • MM是介于01和12之间的一个月
我已经做了下面的一个,问题是它包含无效的月份值

[2]{1}[0]{1}[0-4]{1}[0-9]{1}[0-1]{1}[0-9]{1}

有什么建议吗?

这应该有效:
20[0-4]\d(0[1-9]| 1[0-2])

要匹配一个月,您需要查找以下任一项:

  • 一个
    0
    后跟
    [1-9]
    中的任何内容,或
  • 一个
    1
    后跟
    [0-2]
如果要捕获年份和月份,
(20[0-4]\d)(0[1-9]| 1[0-2])

如果您不想捕获年份或月份,
20[0-4]\d(?:0[1-9]| 1[0-2])

如果要用名称捕获它们,
(?20[0-4]\d)(?0[1-9]| 1[0-2])
(?20[0-4]\d(?(0[1-9])|(1[0-2]))
这是我将分成两个命名组的正则表达式

谢谢,这似乎是我需要的。您可以考虑一个小调整:在括号内添加?:以防止它仅创建一个月的捕获组,如
20[0-4][0-9](?:0[1-9]| 1[0-2])
。我从来没有听说过命名组,这可能对更复杂的问题有用patterns@Arce,实际上,如果您需要提取匹配的值以供以后使用,组(命名或其他)对于简单模式和复杂模式都很有用。是的,命名组很有用,因为在找到与Regex类的匹配后,您可以提取月份和年份,例如match.groups[“year”]好主意,但是
00
不是有效月份。
(?<year>20[0-4]\d(?<month>(0[1-9])|(1[0-2])))