Anda mungkin ingin menunjukkan lingkungan tempat Anda menggunakan Regex. Mungkin ada perbedaan tergantung pada apa yang Anda maksud dengan jeda baris "abaikan".
Saya menggunakan lookbehind (?<=)dan melihat ke depan (?=)sehingga "Ini" dan "kalimat" tidak termasuk dalam pertandingan, tetapi ini tergantung pada kasus penggunaan Anda, Anda juga dapat menulis This is(.*)sentence.
Yang penting di sini adalah Anda mengaktifkan mode "dotall" dari mesin regex Anda, sehingga .cocok dengan baris baru. Tetapi bagaimana Anda melakukan ini tergantung pada mesin regex Anda.
Hal berikutnya adalah apakah Anda menggunakan .*atau .*?. Yang pertama serakah dan akan cocok sampai "kalimat" terakhir di string Anda, yang kedua malas dan akan cocok sampai "kalimat" berikutnya di string Anda.
@tchrist, maaf aku harus mencari ini. Apakah saya memahami ini dengan benar dan This is(?s)(.*)sentenceakan berfungsi?
stema
@stema: Ya, itu seharusnya berfungsi untuk mengaktifkan mode "dot all" di sebagian besar pustaka regex.
tchrist
1
Itu sebagian besar memecahkan masalah saya, tetapi bagaimana saya memasukkan karakter spasi di pola saya? Saya mencoba yang berikut: "(. *?) ())" Untuk mencocokkan ")" di akhir urutan, tetapi tidak berhasil.
0xbadf00d
28
Hanya satu catatan - regexr mengatakan sekarang bahwa lookbehind tidak didukung dalam javascript
Kovo
2
Apakah ada cara untuk menangani contoh berulang dari perpecahan ini dalam satu blok teks? Misalnya: "Ini hanya kalimat sederhana. Ini adalah beberapa hal tambahan. Ini kalimat sederhana. Dan ada beberapa hal lagi. Ini hanya kalimat sederhana.". Saat ini cocok dengan seluruh string, bukan setiap contoh.
jzadra
182
Dibutuhkan Quantifier Malas
Menghidupkan kembali pertanyaan ini karena regex dalam jawaban yang diterima tampaknya tidak benar bagi saya. Mengapa? Karena
(?<=Thisis)(.*)(?=sentence)
akan cocok my first sentence. This is my seconddiThis is my first sentence. This is my second sentence.
Anda membutuhkan kuantifier malas di antara kedua lookaround. Menambahkan bintang ?membuat bintang malas.
Ini sesuai dengan yang Anda inginkan:
(?<=Thisis).*?(?=sentence)
Lihat demo . Saya menghapus grup penangkap, yang tidak diperlukan.
Mode DOTALL untuk Mencocokkan Lintas Batas
Perhatikan bahwa dalam demo "mode dot break line break" (alias) dot-all diatur (lihat cara mengaktifkan DOTALL dalam berbagai bahasa ). Dalam banyak rasa regex, Anda dapat mengaturnya dengan pengubah online (?s), mengubah ekspresi menjadi:
Anda benar tentang grup penangkap. Tidak tahu mengapa saya melakukan ini. Tetapi perbedaan antara .*dan .*?juga dijelaskan dalam jawaban saya (paragraf sebelum "Pembaruan"). Jadi saya tidak berpikir jawaban saya salah.
stema
2
@stema Maaf tentang nitpicking, sementara menjelajahi beberapa jawaban Anda kemarin itu adalah satu-satunya yang membuat saya berkedut. :) Saya melunakkan baris pertama dari is incorrectmenjadi doesn't seem quite correct to me... Harapan itu tidak membuat Anda berkedut, mungkin hanya perbedaan persepsi tentang apa yang seharusnya menjadi jawaban untuk lalu lintas tinggi seperti itu.
zx81
39
Coba This is[\s\S]*sentence, berfungsi dalam javascript
Tidak yakin pertanyaannya adalah tentang bagaimana melakukan ini dalam Sublime Text tetapi sebagian besar berfungsi di Sublime Text. Ini tidak berfungsi ketika ada garis pemisah antara "Ini" dan "kalimat". Selain itu, teks luhur juga memilih "Ini" dan "Kalimat" daripada hanya teks di antara dua string tersebut.
Dylan Kinnett
0
Inilah cara saya melakukannya:
Ini lebih mudah bagi saya daripada mencoba mencari tahu regex spesifik yang diperlukan.
Saya mendarat di sini pada pencarian saya untuk regex untuk mengkonversi sintaks cetak ini antara print "string", di Python2 dalam skrip lama dengan: print ("string"), untuk Python3. Berfungsi dengan baik, jika tidak gunakan 2to3.py untuk konversi tambahan. Inilah solusi saya untuk orang lain:
Cobalah di Regexr.com (tidak berfungsi di NP ++ karena alasan tertentu):
Jawaban:
Sebagai contoh
Regexr
Saya menggunakan lookbehind
(?<=)
dan melihat ke depan(?=)
sehingga "Ini" dan "kalimat" tidak termasuk dalam pertandingan, tetapi ini tergantung pada kasus penggunaan Anda, Anda juga dapat menulisThis is(.*)sentence
.Yang penting di sini adalah Anda mengaktifkan mode "dotall" dari mesin regex Anda, sehingga
.
cocok dengan baris baru. Tetapi bagaimana Anda melakukan ini tergantung pada mesin regex Anda.Hal berikutnya adalah apakah Anda menggunakan
.*
atau.*?
. Yang pertama serakah dan akan cocok sampai "kalimat" terakhir di string Anda, yang kedua malas dan akan cocok sampai "kalimat" berikutnya di string Anda.Memperbarui
Regexr
Di mana (? S) mengaktifkan pengubah dotall, membuat yang
.
cocok dengan karakter baris baru.Pembaruan 2:
cocok dengan contoh Anda "Ini kalimat (sederhana)". Lihat di sini di Regexr
sumber
This is(?s)(.*)sentence
akan berfungsi?Dibutuhkan Quantifier Malas
Menghidupkan kembali pertanyaan ini karena regex dalam jawaban yang diterima tampaknya tidak benar bagi saya. Mengapa? Karena
akan cocok
my first sentence. This is my second
diThis is my first sentence. This is my second sentence.
Lihat demo .
Anda membutuhkan kuantifier malas di antara kedua lookaround. Menambahkan bintang
?
membuat bintang malas.Ini sesuai dengan yang Anda inginkan:
Lihat demo . Saya menghapus grup penangkap, yang tidak diperlukan.
Mode DOTALL untuk Mencocokkan Lintas Batas
Perhatikan bahwa dalam demo "mode dot break line break" (alias) dot-all diatur (lihat cara mengaktifkan DOTALL dalam berbagai bahasa ). Dalam banyak rasa regex, Anda dapat mengaturnya dengan pengubah online
(?s)
, mengubah ekspresi menjadi:Referensi
sumber
.*
dan.*?
juga dijelaskan dalam jawaban saya (paragraf sebelum "Pembaruan"). Jadi saya tidak berpikir jawaban saya salah.is incorrect
menjadidoesn't seem quite correct to me
... Harapan itu tidak membuat Anda berkedut, mungkin hanya perbedaan persepsi tentang apa yang seharusnya menjadi jawaban untuk lalu lintas tinggi seperti itu.Coba
This is[\s\S]*sentence
, berfungsi dalam javascriptsumber
[\s\S]*?
(juga disebut: wildcard non-serakah)Ini:
bekerja di javascript.
sumber
Gunakan ini:
(?<=beginningstringname)(.*\n?)(?=endstringname)
sumber
endstringname
Jika ada yang mencari contoh ini dalam konteks Jenkins. Itu mem-parsing build.log dan jika menemukan kecocokan maka gagal membangun dengan pencocokan
sumber
Anda cukup menggunakan ini:
\This is .*? \sentence
sumber
Ini bekerja untuk saya (saya menggunakan VS Code ):
untuk:
This is just\na simple sentence
Menggunakan:
This .+ sentence
sumber
Sublime Text 3x
Dalam teks luhur, Anda cukup menulis dua kata yang Anda minati, misalnya dalam kasus Anda
"Ini" dan "kalimat"
dan Anda menulis. * di antaranya
yaitu
This is .* sentence
dan ini harus Anda lakukan dengan baik
sumber
Inilah cara saya melakukannya:
Ini lebih mudah bagi saya daripada mencoba mencari tahu regex spesifik yang diperlukan.
sumber
untuk pencarian cepat di VIM, Anda dapat menggunakan perintah Vim Control: / Ini kalimat. * \ _. *
sumber
Saya mendarat di sini pada pencarian saya untuk regex untuk mengkonversi sintaks cetak ini antara print "string", di Python2 dalam skrip lama dengan: print ("string"), untuk Python3. Berfungsi dengan baik, jika tidak gunakan 2to3.py untuk konversi tambahan. Inilah solusi saya untuk orang lain:
Cobalah di Regexr.com (tidak berfungsi di NP ++ karena alasan tertentu):
untuk variabel:
untuk label dan variabel:
Bagaimana cara mengganti semua cetak "string" di Python2 dengan print ("string") untuk Python3?
sumber
RegEx untuk mencocokkan semuanya antara dua string menggunakan pendekatan Java.
Mari kita gunakan objek Pattern and Matcher untuk menggunakan RegEx (. ?) * .
Karena Matcher mungkin berisi lebih dari satu pertandingan, kita perlu mengulang hasilnya dan menyimpannya.
Contoh ini hanya akan berisi kata "akan menyimpan" , tetapi dalam teks yang lebih besar mungkin akan menemukan lebih banyak kecocokan.
sumber