regex 以年和月开头的书签行

cwtwac6a  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(92)

我有一个列表如下:

20110512192714
20794709157481
20121203175303
20794709157481
20210131201708
20211101050154
20220501022609
79776361952441

字符串
现在我想在notepad++中通过regex从左侧选择以年和月开头的行。
请注意,年份必须从2000年开始到2023年。
我试着使用regex:

20(?:0[0-9]|1[0-9]|20)[0-1][0-9]


上面的正则表达式运行良好,但有两个问题:
1.不能选择整行目标和选择一段目标行。(有时可能数字的长度不一样)
1.它不能选择某些行,如以下行:
20211101050154
20220501022609
我的正则表达式问题在哪里?

iqjalb3h

iqjalb3h1#

您的模式20(?:0[0-9]|1[0-9]|20)[0-1][0-9]匹配:
20后跟范围00-09或范围10-19或20后跟00-19或01-19
如果你想匹配一个以2000 - 2023开头的行,并且应该只包含数字:

^20(?:2[0-3]|[01]\d)\d*$

字符串
如果您想包含从1到12的月份,并带有可选的前导零:

^20(?:2[0-3]|[01]\d)(?:0?[1-9]|1[012])\d*$


年份模式匹配:

  • ^字符串开头
  • 20按字面匹配
  • (?:备选方案的非捕获组
  • 2[0-3]匹配20,21,22,23
  • |
  • [01]\d匹配00到19
  • )关闭非捕获组
  • \d*匹配可选数字
  • 结束于字符串结尾

参见regex demo
如果要匹配可能包含任何字符的行的其余部分,可以将模式的最后一部分从\d*$更改为.*

相关问题