使用正则表达式从 Notepad++ 的每一行中提取并仅显示年份

使用正则表达式从 Notepad++ 的每一行中提取并仅显示年份

我有这样的字符串

hack SIGN (2005) g$
5 Cm Per Second - Makoto Shinkai Collection (2007)
Abenobashi (2002) gd
Ai City - La Notte Dei Cloni (1986) dfg
AIKA (1997)
Anna Dai Capelli Rossi (1979) £$"£

我想在 Notepad++ 上显示

2005
2007
2002
1986
1997
1979

我使用这个正则表达式,但似乎效果不佳

寻找:

\(\b(19|20)\d{2}\b\)

代替

r\n\1\1

但它返回的是这样的文字

hack SIGN r
2020 g$
5 Cm Per Second - Makoto Shinkai Collection r
2020
Abenobashi r
2020 gd
Ai City - La Notte Dei Cloni r
1919 dfg
..

所以这个正则表达式不能像预期的那样工作

答案1

按下Ctrl+H后,按照以下说明操作记事本++每行匹配一组 4 位数字并仅打印那些字符,从而得到预期的结果。

  1. 找什么: ^.*?(\d{4}+).*$

    在此处输入图片描述

  2. 用。。。来代替: $1

  3. 搜索模式: Regular expression
  4. Replace All

结果

2005
2007
2002
1986
1997
1979

在此处输入图片描述


更多资源

如何在 Notepad++ 中使用正则表达式

锚点

锚点与行中的某个位置匹配,而不是与特定的字符匹配。

^

这与一行的开头匹配(除了在集合内部使用时,参见上文)。

$

这与行的末尾匹配。

字符的范围或种类

[^...]

集合中字符的补集。

单字符匹配

., \c

匹配任何字符。如果选中“. 匹配换行符”复选框,点号确实会匹配换行符,使“任何”字符可以跨多行运行。如果未选中该选项,则 . 仅匹配一行内的字符,而不匹配行尾字符(\r 和 \n)

乘法运算符

*

这会匹配前一个字符的 0 个或多个实例(尽可能多)。例如,Sa*m 匹配 Sm、Sam、Saam 等等。

*?

零个或多个上一组,但最低限度为:最短匹配字符串,而不是像“贪婪”* 运算符那样最长的字符串。因此,应用于文本 margin-bottom: 0; 的 m.*?o 将匹配 margin-bo,而 m.*o 将匹配 margin-botto。

{n}

匹配其适用的元素的 n 个副本。

+

它将匹配前一个字符的一个或多个实例(尽可能多的实例)。

群组

(...)

括号标记正则表达式的子集。括号内容匹配的字符串( )可以重新用作反向引用或替换操作的一部分;请参阅下面的替换。

组可以嵌套。

(?<some name>...), (?'some name'...),(?(some name)...)

字符的范围或种类

\d

0-9 范围内的数字,与[[:数字:]]


替换

$n, ${n}, \n

返回与编号为 n 的子表达式匹配的内容。不允许使用负索引。

答案2

  • Ctrl+H
  • 找什么:^(?:.*?\(((?:19|20)\d{2})\).*|.*\R)$
  • 用。。。来代替:$1
  • 检查环绕
  • 检查正则表达式
  • 请勿检查. matches newline
  • Replace all

解释:

^                   : beginning of line
  (?:               : start non capture group
    .*?             : 0 or more any character but newline, not greedy
    \(              : open parenthesis
      (             : start group 1
        (?:19|20)   : non capture group, 19 or 20
        \d{2}       : 2 digits
      )             : end group 1
    \)              : close parenthesis
    .*              : 0 or more any character but newline
   |                : OR
    .*              : 0 or more any character but newline
    \R?             : any kind of linebreak, optional
  )                 : end non capture group
$                   : end of line

给出如下输入:

hack SIGN (2005) g$
5 Cm Per Second - Makoto Shinkai Collection (2007)
Abenobashi (2002) gd
Ai City - La Notte Dei Cloni (1986) dfg
AIKA (1997)
Anna Dai Capelli Rossi (1979) £$"£
123456 1234
(123) 4567

我们有:

2005
2007
2002
1986
1997
1979

相关内容