2

У меня есть такие строки

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
..

Так что это регулярное выражение не работает, как ожидалось

2 ответа2

2

Следуйте приведенным ниже инструкциям после нажатия Ctrl+H Блокнот ++», чтобы сопоставить группу из четырехзначных чисел в каждой строке и вывести только те символы, которые дают ожидаемые результаты.

  1. Найти что: ^.*?(\d{4}+).*$

  2. Заменить на: $1

  3. Режим поиска: Regular expression
  4. Нажмите Заменить все

Результаты

2005
2007
2002
1986
1997
1979


Дополнительные ресурсы

Как использовать регулярные выражения в Notepad++

Якоря

Якоря соответствуют позиции в строке, а не конкретному символу.

^

Это соответствует началу строки (кроме случаев использования внутри набора, см. Выше).

$

Это соответствует концу строки.

Диапазоны или виды персонажей

[^...]

Дополнение персонажей в наборе.

Односимвольные совпадения

., \c

Соответствует любому персонажу. Если вы установите флажок «. Соответствует символу новой строки», точка действительно сделает это, позволяя символу "любой" пробегать несколько строк. С отключенной опцией, тогда. будет соответствовать только символам в строке, но не символам конца строки (\r и \n)

Умножающие операторы

*

Это соответствует 0 или более экземплярам предыдущего символа, столько, сколько это возможно. Например, Sa * m соответствует Sm, Sam, Saam и т.д.

*?

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

{n}

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

+

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

группы

(...)

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

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

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

Диапазоны или виды персонажей

\d

Цифра в диапазоне 0-9, такая же как [[: digit:]].


Замены

$n, ${n}, \n

Возвращает то, что соответствует подвыражению с номером n. Отрицательные показатели не допускаются.

0
  • Ctrl+H
  • Найти что: ^(?:.*?\(((?:19|20)\d{2})\).*|.*\R)$
  • Заменить на: $1
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Объяснение:

^                   : 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .