【发布时间】:2022-01-07 16:09:13
【问题描述】:
我开发了一个用于 .NET WebAPI 的正则表达式,它从已格式化为最终格式的给定输入获取日期和控制代码。
我尝试了正则表达式来避免使用多个字符串拆分。
我一直在使用 Regex101 来测试我的表达式,并且我有一个已经按预期工作的表达式,我认为它对于它的作用来说太大了。
表达式:
^([0-9]{2})+([0-9]{2})+([0-9]{2})[0-9](M|F)([0-9]{2})+([0-9]{2})+([0-9]{2})
// 获取格式年、月、日、代码(M|F)、年、月、日
输入:
7603259M2209058PRT<<<<<<<<<<<8
你有什么简化的建议吗?
【问题讨论】:
-
1)
+在你的模式中是错误的,将它们全部删除,2) 使用\d匹配一个数字,并传递RegexOptions.ECMAScript选项,3) 不要使用单chars,使用字符类。new Regex(@"^(\d{2})(\d{2})(\d{2})\d([MF])(\d{2})(\d{2})(\d{2})", RegexOptions.ECMAScript) -
2209058如何描述“年、月、日”?年 = 22,月 = 09,日 = 058??? -
@MathiasR.Jessen year=22, Month=09, Day=05 这就是为什么我希望在 Code(M|F) 之前多一位数字
-
@WiktorStribiżew 感谢您的建议,我保留了 [0-9] 因为它相当于 \d ,我真的不知道引擎是否将 \d 转换为 [0-9] 或如何它炒锅。我只是希望少一些陈述。
-
在这种情况下@WiktorStribiżew 是正确的,您不需要所有那些开放式量词。
^([0-9]{2})([0-9]{2})([0-9]{2})[0-9][MF]([0-9]{2})([0-9]{2})([0-9]{2})应该这样做
标签: c# regex regex-group regex-greedy