我的正则表达式目前看起来像这样
\b(19|20)\d{2}\b[- :][VW][0-5]{1}(?(?=[5])[0-2]{1}|[0-9]{1})
当我试图获得这部分时,它并不是我想做的事情
(?(?=[5])[0-2]{1}|[0-9]{1})
说“如果以前的数字是5,那么你只能在0-2之间选择,如果它是0-4的另一个数字,则允许在0-9之间选择
目前它允许00-59排除05,15,25,35等。
基本上我希望它看起来像2016-W25。
答案 0 :(得分:2)
您需要将[5]
替换为肯定的后备(?<=5)
,以检查当前位置的左侧的
\b(19|20)\d{2}[- :][VW][0-5](?(?=(?<=5))[0-2]|[0-9])
^^^^^
请参阅regex demo
此外,您可以使用仅仅交替组来消除条件模式:
\b(19|20)\d{2}[- :][VW](?:[0-4][0-9]|5[0-2])
^^^^^^^^^^^^^^^^^^^^^
(?:[0-4][0-9]|5[0-2])
匹配0
到4
之间的数字,然后匹配任何数字(请参阅[0-4][0-9]
),或(请参阅|
)a {{ 1}}后跟5
,0
或1
(请参阅2
)。
注意:由于周数可以达到53,因此最后的5[0-2]
可能会替换为[0-2]
,以匹配[0-3]
值。