Извлечь и отобразить только год из каждой строки в 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 и т. д.

*?

Ноль или более из предыдущей группы, но минимально: самая короткая совпадающая строка, а не самая длинная строка, как в случае с "жадным" оператором *. Таким образом, m.*?o, примененный к тексту margin-bottom: 0;, будет соответствовать margin-bo, тогда как m.*o будет соответствовать margin-botto.

{n}

Соответствует n копиям элемента, к которому применяется.

+

Соответствует 1 или более экземплярам предыдущего символа (сколько возможно).

Группы

(...)

Скобки обозначают подмножество регулярного выражения. Строка, совпадающая с содержимым скобок, ( )может быть повторно использована как обратная ссылка или как часть операции замены; см. Замены ниже.

Группы могут быть вложенными.

(?<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

Связанный контент