Saya memiliki string seperti:
"super exemple of string key : text I want to keep - end of my string"
Saya hanya ingin menyimpan string yang berada di antara "key : "
dan " - "
. Bagaimana saya bisa melakukan itu? Haruskah saya menggunakan Regex atau dapatkah saya melakukannya dengan cara lain?
substring
danindexof
Jawaban:
Mungkin, cara yang baik adalah dengan memotong substring :
sumber
atau hanya dengan operasi string
sumber
Anda dapat melakukannya tanpa regex
sumber
Bergantung pada seberapa kuat / fleksibel implementasi yang Anda inginkan, ini sebenarnya bisa sedikit rumit. Berikut implementasi yang saya gunakan:
sumber
InvariantCulture
tidak bekerja dengan Aplikasi Universal Windows. Apakah ada cara untuk menghapusnya dengan tetap mempertahankan fungsionalitas kelas Anda? @ChaseedionInilah cara bagaimana saya bisa melakukan itu
sumber
Saya pikir ini berhasil:
sumber
Regex berlebihan di sini.
Anda dapat menggunakan
string.Split
dengan kelebihan beban yang membutuhkanstring[]
pembatas tetapi itu juga akan berlebihan.Lihat
Substring
danIndexOf
- yang pertama untuk mendapatkan bagian dari string yang diberikan dan indeks dan panjang dan yang kedua untuk menemukan string / karakter dalam yang diindeks.sumber
string.Split
.Solusi LINQ yang berfungsi:
sumber
sumber
Karena
:
dan-
unik, Anda dapat menggunakan:sumber
atau, dengan regex.
dengan contoh berjalan .
Anda dapat memutuskan apakah itu berlebihan.
atau
sebagai metode ekstensi yang divalidasi di bawah
sumber
Ini hanya mengembalikan nilai antara "key:" dan kemunculan "-" berikut ini
sumber
Anda dapat menggunakan metode ekstensi di bawah ini:
Penggunaannya adalah:
sumber
Saya menggunakan potongan kode dari Vijay Singh Rana yang pada dasarnya melakukan pekerjaan itu. Tapi itu menyebabkan masalah jika
firstString
memang sudah mengandunglastString
. Yang saya inginkan adalah mengekstrak access_token dari JSON Response (tidak ada JSON Parser yang dimuat). SayafirstString
dulu\"access_token\": \"
dan sayalastString
dulu\"
. Saya berakhir dengan sedikit modifikasisumber
Jika Anda mencari solusi 1 baris, ini dia:
Seluruh solusi 1 baris, dengan
System.Linq
:sumber
Anda sudah memiliki beberapa jawaban yang bagus dan saya menyadari kode yang saya berikan jauh dari yang paling efisien dan bersih. Namun, saya pikir ini mungkin berguna untuk tujuan pendidikan. Kita dapat menggunakan kelas dan perpustakaan yang telah dibuat sebelumnya sepanjang hari. Tetapi tanpa memahami cara kerja batin, kita hanya meniru dan mengulangi dan tidak akan pernah belajar apa pun. Kode ini berfungsi dan lebih mendasar atau "perawan" daripada beberapa yang lain:
Anda berakhir dengan string yang Anda inginkan yang ditetapkan ke variabel parsedString. Ingatlah bahwa itu juga akan menangkap ruang depan dan sebelumnya. Ingatlah bahwa string hanyalah sebuah array karakter yang dapat dimanipulasi seperti array lain dengan indeks, dll.
Hati hati.
sumber
Jika Anda ingin menangani beberapa kemunculan pasangan substring, tidak akan mudah tanpa RegEx:
Jika urutan & jumlah kemunculan substring tidak penting, yang cepat & kotor ini dapat menjadi pilihan:
Setidaknya ia menghindari sebagian besar pengecualian, dengan mengembalikan string asli jika tidak ada / satu substring yang cocok.
sumber
Seperti yang selalu saya katakan tidak ada yang tidak mungkin:
Harapan Bahwa Saya Membantu.
sumber
Sesuatu seperti ini mungkin
sumber
Ketika pertanyaan dinyatakan dalam satu contoh, ambiguitas pasti ada. Pertanyaan ini tidak terkecuali.
Untuk contoh yang diberikan dalam pertanyaan, string yang diinginkan jelas:
Namun, string ini hanyalah contoh string dan string batas di mana substring tertentu akan diidentifikasi. Saya akan mempertimbangkan string umum dengan string batas umum, yang direpresentasikan sebagai berikut.
PP
adalah string sebelumnya ,FF
adalah string berikutnya dan topi pesta menunjukkan substring mana yang akan dicocokkan. (Dalam contoh yang diberikan dalam pertanyaankey :
adalah string sebelumnya dan string-
berikut.) Saya berasumsi bahwaPP
danFF
didahului dan diikuti oleh batas kata (sehinggaPPA
danFF8
tidak cocok).Asumsi saya, sebagaimana tercermin dari topi pesta, adalah sebagai berikut:
PP
mungkin didahului oleh satu (atau lebih)FF
substring, yang jika ada, akan diabaikan;PP
diikuti oleh satu atau lebihPP
s sebelumFF
ditemukan,PP
s berikut adalah bagian dari substring antara string sebelum dan sesudahnya;PP
diikuti oleh satu atau lebihFF
s sebelum aPP
adalah ditemukan, yang pertamaFF
berikutPP
dianggap sebagai string berikut.Perhatikan bahwa banyak jawaban di sini hanya berurusan dengan string dalam bentuk
atau
Seseorang dapat menggunakan ekspresi reguler, konstruksi kode, atau kombinasi keduanya untuk mengidentifikasi substring yang diminati. Saya tidak menilai pendekatan mana yang terbaik. Saya hanya akan menyajikan ekspresi reguler berikut yang akan cocok dengan substring yang diminati.
Nyalakan mesin Anda! 1
Saya menguji ini dengan mesin regex PCRE (PHP), tetapi karena regex sama sekali tidak eksotis, saya yakin ini akan bekerja dengan mesin regex .NET (yang sangat kuat).
Mesin regex melakukan operasi berikut:
Teknik ini, mencocokkan satu karakter pada satu waktu, mengikuti string sebelumnya, hingga karakter tersebut
F
dan diikuti olehF
(atau lebih umum lagi, karakter menjadi string yang membentuk string berikut), disebut Solusi Token Keserakahan Tempered .Secara alami, regex harus dimodifikasi (jika memungkinkan) jika asumsi yang saya tetapkan di atas diubah.
1. Gerakkan kursor di sekitar untuk penjelasan rinci.
sumber
Di C # 8.0 dan di atasnya, Anda dapat menggunakan operator jangkauan
..
seperti padaLihat dokumentasi untuk detailnya.
sumber