Contoh: "Ini hanya kalimat sederhana".
Saya ingin mencocokkan setiap karakter antara "Ini" dan "kalimat". Jeda baris harus diabaikan. Saya tidak dapat menemukan sintaks yang benar.
Contoh: "Ini hanya kalimat sederhana".
Saya ingin mencocokkan setiap karakter antara "Ini" dan "kalimat". Jeda baris harus diabaikan. Saya tidak dapat menemukan sintaks yang benar.
Jawaban:
Sebagai contoh
(?<=This is)(.*)(?=sentence)
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.
Memperbarui
This is(?s)(.*)sentence
Di mana (? S) mengaktifkan pengubah dotall, membuat yang .
cocok dengan karakter baris baru.
Pembaruan 2:
(?<=is \()(.*?)(?=\s*\))
cocok dengan contoh Anda "Ini kalimat (sederhana)". Lihat di sini di Regexr
This is(?s)(.*)sentence
akan berfungsi?
Menghidupkan kembali pertanyaan ini karena regex dalam jawaban yang diterima tampaknya tidak benar bagi saya. Mengapa? Karena
(?<=This is)(.*)(?=sentence)
akan cocok my first sentence. This is my second
diThis 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:
(?<=This is).*?(?=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:
(?s)(?<=This is).*?(?=sentence)
Referensi
.*
dan .*?
juga dijelaskan dalam jawaban saya (paragraf sebelum "Pembaruan"). Jadi saya tidak berpikir jawaban saya salah.
is incorrect
menjadi 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.
Coba This is[\s\S]*sentence
, berfungsi dalam javascript
[\s\S]*?
(juga disebut: wildcard non-serakah)
Ini:
This is (.*?) sentence
bekerja di javascript.
Gunakan ini: (?<=beginningstringname)(.*\n?)(?=endstringname)
endstringname
Jika ada yang mencari contoh ini dalam konteks Jenkins. Itu mem-parsing build.log dan jika menemukan kecocokan maka gagal membangun dengan pencocokan
import java.util.regex.Matcher;
import java.util.regex.Pattern;
node{
stage("parse"){
def file = readFile 'build.log'
def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
Matcher match = regex.matcher(file)
match.find() {
capturedText = match.group(1)
error(capturedText)
}
}
}
Anda cukup menggunakan ini: \This is .*? \sentence
Ini bekerja untuk saya (saya menggunakan VS Code ):
untuk:
This is just\na simple sentence
Menggunakan:
This .+ sentence
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
Inilah cara saya melakukannya:
Ini lebih mudah bagi saya daripada mencoba mencari tahu regex spesifik yang diperlukan.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
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):
find: (?<=print)( ')(.*)(')
replace: ('$2')
untuk variabel:
(?<=print)( )(.*)(\n)
('$2')\n
untuk label dan variabel:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Bagaimana cara mengganti semua cetak "string" di Python2 dengan print ("string") untuk Python3?
RegEx untuk mencocokkan semuanya antara dua string menggunakan pendekatan Java.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
Mari kita gunakan objek Pattern and Matcher untuk menggunakan RegEx (. ?) * .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Karena Matcher mungkin berisi lebih dari satu pertandingan, kita perlu mengulang hasilnya dan menyimpannya.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
Contoh ini hanya akan berisi kata "akan menyimpan" , tetapi dalam teks yang lebih besar mungkin akan menemukan lebih banyak kecocokan.