Di Notepad ++, cara Mengganti Teks antara dua pembatas di beberapa baris

1

File dibatasi koma dibuat ketika mengekspor kontak google ke dalam apa yang mereka sebut "format Google CSV (untuk mengimpor ke akun Google)". Masalahnya adalah format ini menangani catatan pada banyak baris dengan memasukkan teks dalam tanda kutip, dan memungkinkan CRLF dengan tanda kutip itu.

Dengan kata lain, bayangkan catatan dengan Nama, Catatan, Email ketika memiliki catatan multi-baris muncul sebagai berikut di file .csv:

Namai, "Perhatikan FirstLine \ r \ n

SecondNoteLine \ r \ n

Lastnoteline ", email.addr @ domain.net \ r \ n

Catatan yang sama tanpa bidang catatan muncul sebagai berikut, dan berada dalam satu baris (Lebih banyak standar):

Nama ,, email.addr @ domain.net \ r \ n

Saya mencoba untuk membentuk ekspresi regex yang benar, dan telah berusaha mengeluarkannya Cara menggunakan ekspresi reguler di Notepad ++ (tutorial) tidak berhasil.

Aku terdekat (tidak terlalu dekat) aku s
, \ ". *, \"

dengan. Mencocokkan baris baru.

Ekspresi yang saya coba padukan adalah:

"Pilih teks antara," dan ", hanya ketika ada satu atau lebih / r / n" "dan ganti dengan NUL"

Sehingga dalam contoh di atas, kedua catatan akan sama dan saya bisa membuat setiap catatan kontak muncul pada satu baris, dan dapat mengimpornya ke excel.

Pada titik ini, mata saya berdarah, dan bantuan apa pun akan dihargai.

EdinTexas
sumber

Jawaban:

2

Di bawah ini bekerja untuk saya Notepad ++ sama seperti Anda menjelaskan yang Anda butuhkan, dan dengan contoh data yang Anda berikan dalam pertanyaan Anda juga.

Lampu . .

enter image description here

Kamera . .

  1. Menemukan apa: ((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
  2. Ubah dengan: $1 $2
  3. Pastikan itu Ekspresi reguler Opsi dicentang
  4. Pastikan itu Membungkus Opsi dicentang
  5. tekan Replace All sebanyak yang Anda butuhkan untuk mendapatkan hasil akhir dan yang diharapkan untuk catatan Anda

enter image description here

Aksi . .

enter image description here


Penjelasan:

(
  (?:^|\r\n)     Begin at start of file or before the CRLF before the start of a record
  [^"]*+         Consume all chars up to the opening "
  "              Consume the opening "
  [^\r\n"]*+     Consume all chars up to either the first CRLF or the closing "
)                Save as capturing group 1 (= everything in record before the target CRLF)
\r\n             Consume the target CRLF without capturing it
(
  [^"]*+         Consume all chars up to the closing "
  "              Consume the closing "
)                Save as capturing group 2 (= the rest of the string after the target CRLF)

Catatan: * + adalah kuantifier posesif. Gunakan dengan tepat untuk   mempercepat eksekusi.

Memperbarui:

Versi regex yang lebih umum ini akan bekerja dengan semua jeda baris   urutan ( \r\n, \r atau \n ):

((?:^|[\r\n]+)[^"]*+"[^\r\n"]*+)[\r\n]+([^"]*+")

Sumber

Pimp Juice IT
sumber
Wow! Terima kasih banyak atas solusinya, dan penjelasan yang akan membuat saya mengamuk! Terima kasih!!!
EdinTexas
@EdinTexas - Saya senang mendengar Anda memecahkan masalah Anda, ketika Anda mendapatkan kesempatan, silakan tekan tanda centang kecil untuk membuatnya hijau di sisi kiri atas jawaban saya untuk menerimanya sebagai jawaban yang diterima jika itu membantu Anda menyelesaikan pertanyaan Anda, dan untuk menutup perulangan pada pertanyaan Anda ... Lihat [Menerima Jawaban] untuk visual apa yang harus diperiksa, dll. jika Anda belum terbiasa. Terima kasih!!
Pimp Juice IT