我有这样的字符串
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 位数字并仅打印那些字符,从而得到预期的结果。
结果
2005
2007
2002
1986
1997
1979
更多资源
锚点
锚点与行中的某个位置匹配,而不是与特定的字符匹配。
^
这与一行的开头匹配(除了在集合内部使用时,参见上文)。
$
这与行的末尾匹配。
字符的范围或种类
[^...]
集合中字符的补集。
单字符匹配
., \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