Wyodrębnij i wyświetl tylko rok z każdej linii w Notepad ++, używając wyrażenia regularnego


2

Mam takie łańcuchy

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) £$"£

Chcę wyświetlać w Notepad ++

2005
2007
2002
1986
1997
1979

Używam tego wyrażenia regularnego, ale wydaje się, że nie działa dobrze

ODNALEŹĆ:

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

ZASTĄPIĆ

r\n\1\1

Ale zwraca mi taki tekst

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

Więc ten regex nie działa zgodnie z oczekiwaniami

Odpowiedzi:


2

Postępuj zgodnie z instrukcjami poniżej po naciśnięciu Ctrl+ Hz Notepad ++, aby dopasować grupę 4 cyfr liczb w każdym wierszu i wydrukuj tylko te znaki, aby uzyskać oczekiwane wyniki.

  1. Znajdź co: ^.*?(\d{4}+).*$

    wprowadź opis zdjęcia tutaj

  2. Zamienić: $1

  3. Tryb szukania: Regular expression
  4. naciśnij Replace All

Wyniki

2005
2007
2002
1986
1997
1979

wprowadź opis zdjęcia tutaj


Dalsze zasoby

Jak korzystać z wyrażeń regularnych w Notepad ++

Kotwice

Kotwice pasują do pozycji w linii, a nie do określonego znaku.

^

Odpowiada to początkowi linii (z wyjątkiem przypadków użycia w zestawie, patrz wyżej).

$

To pasuje do końca linii.

Zakresy lub rodzaje znaków

[^...]

Uzupełnienie znaków w zestawie.

Dopasowania jednoznakowe

., \c

Pasuje do dowolnej postaci. Jeśli zaznaczysz pole z napisem „. Pasuje do nowej linii”, kropka rzeczywiście to zrobi, umożliwiając znakowi „dowolny” przebieganie przez wiele wierszy. Jeśli opcja nie jest zaznaczona, wtedy. dopasuje tylko znaki w linii, a nie znaki kończące linię (\ r i \ n)

Mnożenie operatorów

*

Dopasowuje 0 lub więcej wystąpień poprzedniego znaku, tyle ile może. Na przykład Sa * m pasuje do Sm, Sam, Saam i tak dalej.

*?

Zero lub więcej z poprzedniej grupy, ale minimalnie: najkrótszy pasujący ciąg, a nie najdłuższy ciąg, jak w przypadku operatora „zachłannego” *. Zatem m. *? O zastosowane do marginesu tekstu na dole: 0; dopasuje margin-bo, a m. * o dopasuje margin-botto.

{n}

Dopasowuje n kopii elementu, którego dotyczy.

+

Dopasowuje 1 lub więcej wystąpień poprzedniej postaci, jak najwięcej.

Grupy

(...)

Nawiasy oznaczają podzbiór wyrażenia regularnego. Ciąg pasujący do treści w nawiasach ( )może być ponownie użyty jako odwołanie wsteczne lub jako część operacji zamiany; patrz Podstawienia poniżej.

Grupy mogą być zagnieżdżone.

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

Zakresy lub rodzaje znaków

\d

Cyfra z zakresu 0–9, taka sama jak [[: cyfra:]] .


Podstawienia

$n, ${n}, \n

Zwraca to, co pasowało do podwyrażenia o numerze n. Wskaźniki ujemne nie są dozwolone.


Nie działa, jeśli jest coś takiego jak 123456w linii.
Toto

Nie jestem jednak pewien, co to ma wspólnego z tym pytaniem, ale wyjaśniłem dla PO .... W podanych przykładach danych nie ma 6 kolejnych cyfr, więc nie kodowałem zmiennych poza zakresem pytania jak sformułowano. To rozwiązanie nie zależy od tego, czy YYYYcyfry są zawarte w ()nawiasach, więc zwróci, YYYYniezależnie od tego, czy są ujęte. Ponadto, jeśli jest tylko YYYYsama linia, to rozwiązanie nie usunie jej w przeciwieństwie do innych rozwiązań, pod warunkiem, że tak. Wreszcie, przede wszystkim odpowiedziałem roboczą odpowiedzią.
Pimp Juice IT

0
  • Ctrl+H
  • Znajdź co: ^(?:.*?\(((?:19|20)\d{2})\).*|.*\R)$
  • Zamienić: $1
  • zaznacz opcję Zawiń się
  • zaznacz Wyrażenie regularne
  • NIE SPRAWDŹ . matches newline
  • Replace all

Wyjaśnienie:

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

Biorąc pod uwagę dane wejściowe takie jak:

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

Mamy:

2005
2007
2002
1986
1997
1979

Nie wiem, którą z 2 odpowiedzi wybrać ... ponieważ działają obie ..
Super Sonic

@SuperSonic: Druga odpowiedź nie usuwa wiersza 123456 789, patrz ostatnie dwa wiersze mojego przykładu.
Toto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.