为以年和月开头的行添加书签

Bookmark lines that start with a year and month

提问人:Pubg Mobile 提问时间:11/12/2023 更新时间:11/12/2023 访问量:33

问:

我有一个列表,如下所示:

20110512192714
20794709157481
20121203175303
20794709157481
20210131201708
20211101050154
20220501022609
79776361952441

现在我想通过正则表达式从记事本++的左侧选择以年份和月份开头的行。
请注意,年份必须从 2000 年到 2023 年开始。
我尝试了以下正则表达式:

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

上面的正则表达式工作正常,但有两个问题:

  1. 无法选择整行目标和选择目标线的一部分。 (有时可能数字的长度不一样)

  2. 它无法选择 有些行如下:

    20211101050154
    20220501022609

我的正则表达式问题在哪里?

正则表达式 记事本++

评论

0赞 The fourth bird 11/12/2023
是否要开始匹配?regex101.com/r/3E5VPW/1^20(?:2[0-3]|[01]\d)
0赞 Pubg Mobile 11/12/2023
@Thefourthbird很好,但如何选择整个目标线呢?
0赞 The fourth bird 11/12/2023
如果只有数字,则可以匹配整行,或者将行的其余部分与^20(?:2[0-3]|[01]\d)\d*$^20(?:2[0-3]|[01]\d).*
0赞 Pubg Mobile 11/12/2023
@Thefourthbird很好,谢谢你向我解释解决方案。通过解释我可以接受它来发送答案。

答:

1赞 The fourth bird 11/12/2023 #1

您的模式匹配: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*匹配可选数字
  • $字符串末尾

观看正则表达式演示

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