Rumah > Java > javaTutorial > Bagaimana untuk Memisahkan Rentetan Dibatasi Koma dengan Petikan Terbenam?

Bagaimana untuk Memisahkan Rentetan Dibatasi Koma dengan Petikan Terbenam?

DDD
Lepaskan: 2024-12-07 08:11:11
asal
193 orang telah melayarinya

How to Split Comma-Delimited Strings with Embedded Quotes?

Memisahkan Teks Dibatasi dengan Petikan Terbenam

Apabila menghuraikan teks yang mengikut format yang dibataskan koma, mengendalikan petikan terbenam boleh menimbulkan cabaran. Artikel ini menangani isu ini, menyediakan penyelesaian untuk memisahkan rentetan pada koma sambil mengekalkan integriti teks yang disertakan dalam petikan.

Pertimbangkan teks berikut:

123,test,444,"don't split, this",more test,1
Salin selepas log masuk

Menggunakan Rentetan asas. kaedah split(",") akan menghasilkan keputusan berikut:

123
test
444
"don't split
 this"
more test
1
Salin selepas log masuk

Walau bagaimanapun, matlamatnya adalah untuk mengekalkan teks yang dipetik sebagai entiti tunggal:

123
test
444
"don't split, this"
more test
1
Salin selepas log masuk

Untuk mencapai ini, kami menggunakan penyelesaian berasaskan ungkapan biasa:

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

Ungkapan ini memisahkan rentetan berdasarkan koma yang diikuti dengan bilangan genap petikan berganda. Ini memastikan koma dalam teks yang dipetik diabaikan sebagai pembatas.

Memahami Ungkapan Biasa:

  • ,(?=( - Memadankan koma diikuti dengan pandang ke hadapan penegasan.
  • (?:[^"]*"[^"]*")*: Memadankan sifar atau lebih ulangan bagi corak teks petikan berikut: "[^"]*" (petikan tunggal diikuti oleh aksara bukan petikan, diikuti dengan petikan lain).
  • [^"]*: Memadankan sifar atau lebih aksara bukan petikan sebelum petikan.
  • $[^"]*$: Menegaskan bahawa penghujung rentetan dicapai selepas memadankan aksara bukan petikan.

Sintaks Alternatif:

Untuk kebolehbacaan, anda juga boleh memecahkan ungkapan biasa kepada berbilang baris menggunakan (?x) pengubah suai:

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
                         );
Salin selepas log masuk

Pendekatan ini memastikan pemisahan teks yang dibataskan dengan tepat, mengambil kira kedua-dua koma dan petikan terbenam.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dibatasi Koma dengan Petikan Terbenam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan