Saya memiliki string yang memiliki dua tanda kutip tunggal di dalamnya, '
karakter. Di antara tanda kutip tunggal adalah data yang saya inginkan.
Bagaimana saya bisa menulis regex untuk mengekstrak "data yang saya inginkan" dari teks berikut?
mydata = "some string with 'the data i want' inside";
java
regex
string
text-extraction
asdasd
sumber
sumber
this 'is' my 'data' with quotes
itu akan berhenti lebih awal dan kembaliis
bukannya mencocokkan karakter sebanyak mungkin dan kembaliis' my 'data
, yang merupakan perilaku default.Anda tidak perlu regex untuk ini.
Tambahkan apache commons lang ke proyek Anda ( http://commons.apache.org/proper/commons-lang/ ), lalu gunakan:
sumber
sumber
Ada satu kalimat sederhana untuk ini:
Dengan menjadikan grup yang cocok sebagai opsional, ini juga melayani kuotasi yang tidak ditemukan dengan mengembalikan blanko dalam hal itu.
Lihat demo langsung .
sumber
Karena Anda juga menandai Scala, solusi tanpa regex yang dengan mudah menangani beberapa string yang dikutip:
sumber
.split('\'').get(2)
atau sesuatu sejauh itu di Jawa? Saya pikir Anda mungkin perlu memindai otak jika Anda pikir itu solusi yang mudah dibaca - sepertinya seseorang sedang mencoba melakukan beberapa kode golf kepada saya.sumber
seperti pada javascript:
regexp yang sebenarnya adalah:
/'([^']+)'/
jika Anda menggunakan pengubah non serakah (seperti posting lain) itu seperti ini:
ini lebih bersih.
sumber
Di Scala,
sumber
String dataIWant = mydata.split("'")[1];
Lihat Demo Langsung
sumber
Apache Commons Lang menyediakan sejumlah utilitas pembantu untuk java.lang API, terutama metode manipulasi String. Dalam kasus Anda, awal dan akhir substring adalah sama, jadi panggil saja fungsi berikut.
Jika awal dan akhir substring berbeda maka gunakan metode kelebihan beban berikut.
Jika Anda ingin semua contoh substring yang cocok, gunakan,
Sebagai contoh dalam pertanyaan untuk mendapatkan semua instance dari substring yang cocok
sumber
Anda dapat menggunakan ini saya gunakan saat loop untuk menyimpan semua pertandingan substring dalam array jika Anda menggunakan
if (matcher.find()) { System.out.println(matcher.group(1)); }
Anda akan mendapatkan substring pertandingan sehingga Anda dapat menggunakan ini untuk mendapatkan semua substring pertandingan
sumber
tambahkan apache.commons ketergantungan pada pom.xml Anda
Dan kode di bawah ini berfungsi.
sumber
Beberapa cara grup (1) tidak bekerja untuk saya. Saya menggunakan grup (0) untuk menemukan versi url.
sumber