正则表达式:正向前瞻不会在指定的数字范围停止?

时间:2017-06-09 20:31:11

标签: regex

我找了类似的问题,但找不到我需要的东西。我有这个数据串,例如:

2016 12
2017 01
2017 02
2017 03
2017 04
2017 05
2017 06
2017 07
2017 12
2018 01
2018 02
2018 03
2018 04
2018 05
2018 06
2018 07

我需要过滤选择范围,在本例中为2017 | 05至2018 | 04。我正在使用这个正则表达式:

((?=2017).*(?=0[5-9]|1[0-2]).*)|((?=2018).*(?=0[1-4]).*)

适用于2017年的系列,但是继续包括2018 | 05及以后。有什么想法可能会发生这种情况吗?

2 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况的任何想法?

模式的后半部分((?=2018).*(?=0[1-4]).*)将匹配(使用_来显示空格):

对于行2018_01
(?=2018)匹配2018
.*匹配2018_
(?=0[1-4])匹配01
.*匹配01

对于行2018_05
(?=2018)匹配2018
.*匹配2
(?=0[1-4])匹配01 (2018年的中间两位数字)
.*匹配018_01

答案 1 :(得分:0)

这将匹配日期的连续范围内的任何内容 请注意,这并非强制连续(递增)月/日,但必须是连续的一年,因为它是从 - 到的东西。

(?:2017[ ](?:0[5-9]|1[0-2])\r?\n)+(?:2018[ ]0[1-4](?:\r?\n|$))+

http://www.youtube.com/watch?v=BaW_jenozKcj

扩展

 (?:
      2017 [ ]                      # 2017
      (?: 0 [5-9] | 1 [0-2] )       # 05 - 12
      \r? \n 
 )+
 (?:
      2018 [ ]                      # 2018
      0 [1-4]                       # 01 - 04
      (?: \r? \n | $ )
 )+