Ekstrak dan tampilkan hanya setahun dari setiap baris di Notepad ++ menggunakan regex

2

Saya punya string seperti itu

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

Saya ingin ditampilkan di Notepad ++

2005
2007
2002
1986
1997
1979

Saya menggunakan regex ini tetapi sepertinya tidak berfungsi dengan baik

MENEMUKAN:

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

MENGGANTIKAN

r\n\1\1

Tapi itu mengembalikan saya teks seperti ini

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

Jadi regex ini tidak berfungsi seperti yang diharapkan

Super Sonic
sumber

Jawaban:

2

Ikuti instruksi di bawah ini saat menekan Ctrl + H dari Notepad ++ untuk mencocokkan sekelompok angka 4 digit per setiap baris dan mencetak hanya karakter yang memberikan Anda hasil yang diharapkan.

  1. Menemukan apa: ^.*?(\d{4}+).*$

    enter image description here

  2. Ubah dengan: $1

  3. Mode Pencarian: Regular expression
  4. tekan Menggantikan semua

Hasil

2005
2007
2002
1986
1997
1979

enter image description here


Sumber Daya Lebih Lanjut

Cara menggunakan ekspresi reguler di Notepad ++

Jangkar

Jangkar cocok dengan posisi di garis, bukan khusus   karakter.

^

Ini cocok dengan awal garis (kecuali saat digunakan di dalam set, lihat   atas).

$

Ini cocok dengan akhir baris.

Kisaran atau jenis karakter

[^...]

Komplemen dari karakter di set.

Pertandingan karakter tunggal

., \c

Cocok dengan karakter apa pun. Jika Anda mencentang kotak yang bertuliskan ". Cocok   baris baru ", titik memang akan melakukan itu, memungkinkan karakter" apa saja "   menabrak banyak baris. Dengan opsi tidak dicentang, maka. hanya akan   cocokkan karakter dalam satu baris, dan bukan karakter akhir baris (\ r   dan N)

Mengalikan operator

*

Ini cocok dengan 0 atau lebih contoh karakter sebelumnya, sebanyak   Bisa. Misalnya, Sa * m cocok dengan Sm, Sam, Saam, dan sebagainya.

*?

Nol atau lebih dari grup sebelumnya, tetapi minimal: yang terpendek   string yang cocok, bukan string terpanjang seperti dengan "serakah" *   operator. Jadi, m. *? O diterapkan pada margin-bawah teks: 0; akan cocok   margin-bo, sedangkan m. * o akan cocok dengan margin-botto.

{n}

Cocokkan dengan n salinan elemen yang diterapkannya.

+

Ini cocok dengan 1 atau lebih contoh karakter sebelumnya, sebanyak   Bisa.

Grup

(...)

Tanda kurung menandai subset dari ekspresi reguler. String   cocok dengan isi tanda kurung ( ) dapat digunakan kembali sebagai   referensi balik atau sebagai bagian dari operasi pengganti; lihat Substitusi,   di bawah.

Grup dapat disarangkan.

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

Kisaran atau jenis karakter

\d

Angka dalam rentang 0-9, sama dengan [[:angka:]] .


Substitusi

$n, ${n}, \n

Mengembalikan yang cocok dengan nomor subekspresi dan. Indeks negatif tidak diizinkan.

Pimp Juice IT
sumber
Itu tidak berfungsi jika ada sesuatu seperti 123456 dalam satu baris.
Toto
Saya tidak yakin apa yang harus dilakukan dengan pertanyaan ini, tetapi saya mengklarifikasi untuk OP .... Tidak ada 6 digit berturut-turut dalam contoh data yang disediakan sehingga saya tidak kode untuk variabel di luar ruang lingkup pertanyaan seperti yang dikatakan. Solusi ini tidak tergantung pada YYYY digit dilampirkan oleh () karakter tanda kurung sehingga akan kembali YYYY apakah tertutup atau tidak. Selanjutnya kalau ada saja YYYY pada garis saja maka solusi ini tidak akan menghapusnya tidak seperti solusi lain asalkan tidak. Terakhir tetapi tidak kalah pentingnya, saya menjawab dengan jawaban yang berfungsi terlebih dahulu sebelum Anda.
Pimp Juice IT
0
  • Ctrl + H
  • Menemukan apa: ^(?:.*?\(((?:19|20)\d{2})\).*|.*\R)$
  • Ubah dengan: $1
  • periksa Bungkus
  • periksa persamaan reguler
  • JANGAN PERIKSA . matches newline
  • Menggantikan semua

Penjelasan:

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

Diberikan input seperti:

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

Kita punya:

2005
2007
2002
1986
1997
1979
Toto
sumber
Saya tidak tahu yang mana dari 2 jawaban untuk memilih ... karena bekerja keduanya ..
Super Sonic
@SuperSonic: Jawaban lainnya tidak menghapus baris seperti 123456 789, lihat dua baris terakhir dari contoh saya.
Toto