정규식을 사용하여 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) £$"£

메모장에 표시하고 싶습니다++

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

모든 문자와 일치합니다. ".matches newline"이라는 상자를 선택하면 점이 실제로 그렇게 하여 "any" 문자가 여러 줄에 걸쳐 실행될 수 있게 됩니다. 옵션을 선택하지 않은 상태에서 . 줄 끝 문자(\r 및 \n)가 아닌 줄 내의 문자만 일치합니다.

곱셈 연산자

*

이는 이전 문자의 0개 이상의 인스턴스와 가능한 한 많이 일치합니다. 예를 들어 Sa*m은 Sm, Sam, Saam 등과 일치합니다.

*?

이전 그룹이 0개 이상이지만 최소한: "탐욕스러운" * 연산자와 같이 가장 긴 문자열이 아닌 가장 짧은 일치 문자열입니다. 따라서 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

관련 정보