gpt4 book ai didi

c# - 我坚持的正则表达式问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:46 25 4
gpt4 key购买 nike

我必须编写一个正则表达式来匹配模式 1-6/2011。在这种情况下,/之前的数字不能大于12。所以我必须选择 1-12 之间的数字。

我写了一个正则表达式:

^[1-9][0-2]?\s*[-−—]\s*[1-9][0-2]?\s*/\s*2[01][0-9][0-9]$

但是,在这里我得到 20-6/2014 也作为匹配项。

我尝试过消极回顾:

^[1-9](?<![2-9])[0-2]?\s*[-−—]\s*[1-9](?<![2-9])[0-2]?\s*/\s*2[01][0-9][0-9]$

在这里,不会识别单个数字。

最佳答案

您可以使用以下正则表达式更新:

^(?:0?[1-9]|1[0-2])\s*[-−—]\s*(?:0?[1-9]|1[0-2])\s*/\s*\s*2[01][0-9]{2}$

参见 demo

它不会匹配 12-30/201412-31/201412-32/201413 -31/2014, 20-6/2014.

它将匹配 1-6/201102-12/2014

C#:

var lines = "1-6/2011\r\n02-12/2014\r\n12-30/2014\r\n12-31/2014\r\n12-32/2014\r\n13-31/2014\r\n20-6/2014";
var finds = Regex.Matches(lines, @"^(?:0?[1-9]|1[0-2])\s*[-−—]\s*(?:0?[1-9]|1[0-2])\s*/\s*\s*2[01][0-9]{2}\r?$", RegexOptions.Multiline);

请注意 \r? 仅在我们使用多行模式进行测试时才需要。您可以在检查单独的值时将其删除。

关于c# - 我坚持的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com