Rumah >Java >javaTutorial >Bagaimana untuk Memisahkan Teks Dipisahkan Koma dengan Petikan Menggunakan Ungkapan Biasa?

Bagaimana untuk Memisahkan Teks Dipisahkan Koma dengan Petikan Menggunakan Ungkapan Biasa?

Barbara Streisand
Barbara Streisandasal
2024-12-02 01:15:10467semak imbas

How to Split Comma-Separated Text with Quotes Using Regular Expressions?

Memisahkan Teks Dipisahkan Koma dengan Petikan

Dalam senario tertentu di mana data teks mengandungi nilai dipisahkan koma, adalah perlu untuk memisahkan data berdasarkan koma. Walau bagaimanapun, cabaran timbul apabila data mengandungi rentetan dengan koma terbenam dalam petikan.

Untuk menangani perkara ini, penyelesaian serba boleh adalah menggunakan ungkapan biasa yang secara khusus menyasarkan koma yang terletak di luar petikan berganda:

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

Membedah regex ini:

  • :, mewakili koma sasaran antara nilai data.
  • (?=...$) ialah pernyataan pandangan ke hadapan, menunjukkan bahawa koma mesti diikuti dengan ungkapan yang tinggal.
  • (?:[^"]*"[^"]*")* sepadan dengan sifar atau lebih ulangan pasangan berganda petikan, memastikan bahawa sebarang koma terbenam dikecualikan daripada pemisahan.
  • [^"]* sepadan dengan mana-mana aksara bukan petikan selepas petikan berganda terakhir atau permulaan rentetan.

Sebagai alternatif, regex yang sama boleh ditulis dalam format yang lebih mudah dibaca menggunakan pengubah suai (?x), yang membenarkan ungkapan berbilang baris untuk meningkatkan kebolehbacaan:

String[] arr = str.split("(?x)   " + 
                     ",          " +   // Split on comma
                     "(?=        " +   // Followed by
                     "  (?:      " +   // Start a non-capture group
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "  )*       " +   // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
                     "  [^\"]*   " +   // Finally 0 or more non-quotes
                     "  $        " +   // Till the end  (This is necessary, else every comma will satisfy the condition)
                     ")          "     // End look-ahead
                         );

Penyelesaian ini menyelesaikan isu pemisahan teks yang dipisahkan koma secara berkesan sambil mengekalkan integriti rentetan yang mengandungi koma yang disertakan dalam petikan berganda.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Teks Dipisahkan Koma dengan Petikan Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn