Regex 可以在正则表达式中对组求反吗?
假设我们有这样一个文本:Regex 可以在正则表达式中对组求反吗?,regex,Regex,假设我们有这样一个文本: 2020-09-29 2020-09-30 2020-10-01 2020-10-02 2020-10-12 2020-10-16 2020-11-12 2020-11-23 2020-11-15 2020-12-01 2020-12-11 2020-12-30 我想这样做: \d\d\d\d-NOT10-30 所以我想得到任何一年的所有日期,但不是第十个月的日期,重要的是,这一天是30天 我尝试了很多使用消极的前瞻性评估来实现这一点,但我没有找到任何有效的正则表达式
2020-09-29
2020-09-30
2020-10-01
2020-10-02
2020-10-12
2020-10-16
2020-11-12
2020-11-23
2020-11-15
2020-12-01
2020-12-11
2020-12-30
我想这样做:
\d\d\d\d-NOT10-30
所以我想得到任何一年的所有日期,但不是第十个月的日期,重要的是,这一天是30天
我尝试了很多使用消极的前瞻性评估来实现这一点,但我没有找到任何有效的正则表达式。尝试:
/20\d{2}-(?:0[1-9]|1[12])-30/
说明:
20\d{2}它将匹配20XX
?:0[1-9]| 1[12]它将匹配0X或11,12
30它将与30相匹配
演示:尝试:
/20\d{2}-(?:0[1-9]|1[12])-30/
说明:
20\d{2}它将匹配20XX
?:0[1-9]| 1[12]它将匹配0X或11,12
30它将与30相匹配
演示:您可以使用:
角色?!10确保在插入正则表达式的点上没有10跟随。请注意,之后仍然需要匹配以下数字,因此\d\d部分
一般来说,据我所知,你不能否定一部分,然后也匹配字符串的一部分。但是如果是负面的,你可以像我上面做的那样模拟。广义的想法看起来像:
(?!<special-exclusion-pattern>)<general-inclusion-pattern>
其中,特殊排除模式与一般包含模式的子集匹配。在上述情况下,一般包含模式为\d\d,特殊排除模式为ins 10。您可以使用:
角色?!10确保在插入正则表达式的点上没有10跟随。请注意,之后仍然需要匹配以下数字,因此\d\d部分
一般来说,据我所知,你不能否定一部分,然后也匹配字符串的一部分。但是如果是负面的,你可以像我上面做的那样模拟。广义的想法看起来像:
(?!<special-exclusion-pattern>)<general-inclusion-pattern>
其中,特殊排除模式与一般包含模式的子集匹配。在上述情况下,一般包含模式为\d\d,特殊排除模式为ins 10。最简单的方法是将匹配/^\d{4}-10-30$/的子字符串(如果存在)转换为空字符串,然后在一个或多个换行上拆分生成的字符串 如果你的绳子
2020-10-16
2020-10-30
2020-11-12
2020-11-23
由变量str保存,例如在Ruby中
str.sub(/^\d{4}-10-30$/,'')
#=> "2020-10-16\n\n2020-11-12\n2020-11-23\n"
所以
毫无疑问,您使用的任何语言都有类似的方法。最简单的方法是将匹配/^\d{4}-10-30$/的子字符串(如果存在)转换为空字符串,然后在一个或多个换行符上拆分结果字符串 如果你的绳子
2020-10-16
2020-10-30
2020-11-12
2020-11-23
由变量str保存,例如在Ruby中
str.sub(/^\d{4}-10-30$/,'')
#=> "2020-10-16\n\n2020-11-12\n2020-11-23\n"
所以
毫无疑问,你使用的任何语言都有类似的方法。NOT10==0[1-9]| 1[12]你的问题不清楚。你说你想得到任何一年的所有日期,其中有365或366个,除了一个,10月30日。但这与你展示的字符串无关。您的意思是希望从字符串中提取除10月30日以外的所有日期吗?一些答案建议您希望列表中的所有日期都是30天,而月份不是10月。请编辑以澄清。NOT10==0[1-9]| 1[12]您的问题不清楚。你说你想得到任何一年的所有日期,其中有365或366个,除了一个,10月30日。但这与你展示的字符串无关。您的意思是希望从字符串中提取除10月30日以外的所有日期吗?一些答案建议您希望列表中的所有日期都是30天,而月份不是10月。请编辑以澄清。0\d可能过于宽泛,因为模式将匹配00我认为它只需要一个简单的正则表达式,0\d可能过于宽泛,因为模式将匹配00我认为它只需要一个简单的正则表达式,非常感谢!我试着那样做\d{4}-?!10-30但我不明白为什么它不起作用!非常感谢。这将匹配除第10个月以外的每个月第30天的所有日期。这如何帮助OP获得列表中的所有日期,但最多一个?非常感谢!我试着那样做\d{4}-?!10-30但我不明白为什么它不起作用!非常感谢。这将匹配除第10个月以外的每个月第30天的所有日期。这如何帮助OP获得列表中的所有日期,但最多一个?