Regex menghapus garis berisi karakter

0

Saya memiliki daftar nilai yang dikembalikan kepada saya dan semuanya berakhir dengan | seperti di bawah ini:

testdata1-old |
testdata |
test2-old|

Saya ingin menghapus semua baris yang mengandung -old. Regex apa yang bisa saya gunakan?

user3738022
sumber
1
OS, lingkungan, atau bahasa pemrograman apa yang Anda gunakan?
Steven
jendela, lingkungan tidak yakin apa yang Anda maksud tetapi pada saat ini dalam integrasi dan bahasa regEX java akan baik ... jenis seperti ini saya punya "^. +? \ SPM _. + $" tapi jelas melayani yang berbeda tujuan
user3738022
1
Apa inputnya? Apa hasilnya? Apakah ini file? Apakah ini digunakan dalam konteks pemrograman dengan Java? Script batch?
Samir
input adalah permintaan xpath yang memberikan output ini, digunakan dalam konteks pemrograman dengan java yes. Jadi cetak, tulis ke file tidak akan sesuai. Satu-satunya hal yang dapat diterima adalah ekspresi reguler. Saya mendapatkan ini "^. + \ - old. + $" Tetapi melakukan sebaliknya bukannya menghapus semuanya dengan
user3738022

Jawaban:

3

Saya pikir Anda memiliki kesalahpahaman tentang ekspresi reguler. Pada dasarnya mereka menjawab pertanyaan "apakah teks ini terlihat seperti pola khusus ini?" Ada banyak alat yang menggunakan ekspresi reguler untuk memanipulasi teks sed atau grep, dan saya pikir Anda membingungkan keduanya.

Yang perlu Anda lakukan adalah membentuk ekspresi reguler yang cocok dengan teks yang ingin Anda filter. Misalnya, ekspresi yang Anda cari adalah ^.*-old\|$, dan filter garis menggunakan sesuatu seperti ini.

foreach line in input_file
    if regex.matches(line, "^.*-old\|$") then
        continue
    else
        print line
Akinos
sumber
Oke saya baru semua ini jadi saya mendapatkan istilah saya campur aduk, saya mencoba ekspresi sendiri dan tidak melakukan apa-apa yang tidak menghapus garis dengan -old. saya
user3738022
Saya telah mencoba regex ini "^. + \ - old. + $" Tetapi alih-alih menghapus baris-baris itu, mempertahankannya
user3738022
Yang kedua, ekspresi regex digunakan untuk "menjawab pertanyaan", atau lebih tepatnya menggambarkan polanya. Jelas mereka bukan yang mengajukan pertanyaan! ;-) Jika ada, penerjemahlah yang mengajukan pertanyaan "apa yang Anda ingin saya cari?".
Samir
Oke jadi apa yang bisa saya gunakan untuk memfilter ini dan mendapatkan hasil yang diinginkan karena semua baris yang mengandung -old dihapus
user3738022
@ user3738022 Kode pseudo yang diberikan Nat akan mencetak semua baris itu jangan cocok dengan regex. Jika Anda ingin dapat mengembalikannya ke fungsi lain di Jawa, Anda dapat membuat StringBuilder dan tambahkan line untuk itu di else klausa alih-alih mencetak.
8bittree
0

Yang Anda butuhkan adalah

grep -v -E '^. * - old \ | $' input_file & gt; berkas keluaran

atau apa yang harus bekerja sama:

egrep -v '^. * - old \ | $' input_file & gt; berkas keluaran

Sekarang, bagian yang sulit adalah menemukan versi windows grep atau egrep yang berjalan dari cmd.exe atau Powershell.

Hannu
sumber
Terima kasih tetapi seperti yang Anda katakan bagian yang sulit menemukan versi windows untuk grrp atau egrep Saya tidak ingin menggunakan cmd dan PowerShell. Tidak bisakah saya hanya mengubah ronde perintah ini sehingga menghapus baris dengan yang lama alih-alih hanya memilih yang: ^. +? \ - old. + $
user3738022
regular-expressions.info/lookaround.html - negative lokahead mungkin bekerja, tergantung pada mesin regex Anda.
Hannu