Örnek: "Bu sadece basit bir cümledir".
"Bu" ve "cümle" arasındaki her karakteri eşleştirmek istiyorum. Satır kesmeleri yoksayılmalıdır. Doğru sözdizimini bulamıyorum.
Örnek: "Bu sadece basit bir cümledir".
"Bu" ve "cümle" arasındaki her karakteri eşleştirmek istiyorum. Satır kesmeleri yoksayılmalıdır. Doğru sözdizimini bulamıyorum.
Yanıtlar:
Örneğin
(?<=This is)(.*)(?=sentence)
"Bu" ve "cümle" nin maçta yer almaması için (?<=)
ileriye baktım ve ileriye baktım (?=)
, ancak bu sizin kullanım durumunuza bağlı, sadece yazabilirsiniz This is(.*)sentence
.
Burada önemli olan, regex motorunuzun "dotall" modunu etkinleştirmeniz ve böylece .
yeni satır ile eşleşmesidir. Ancak bunu nasıl yapacağınız regex motorunuza bağlıdır.
Bir sonraki şey .*
veya kullanırsanız .*?
. Birincisi açgözlüdür ve dizenizdeki son "cümle" ye, ikincisi tembeldir ve dizenizdeki bir sonraki "cümle" ye kadar eşleşir.
Güncelleme
This is(?s)(.*)sentence
Nerede (? S) dotall değiştiricisini açar .
ve yeni satır karakterlerini eşleştirir.
Güncelleme 2:
(?<=is \()(.*?)(?=\s*\))
"Bu (basit) bir cümle" örneğinizle eşleşiyor. Buraya Regexr bakın
This is(?s)(.*)sentence
işe yarar mı?
Kabul edilen cevaptaki normal ifade benim için pek doğru görünmediği için bu soruyu yeniden canlandırmak. Neden? Çünkü
(?<=This is)(.*)(?=sentence)
eşleşir my first sentence. This is my second
içindeThis is my first sentence. This is my second sentence.
İki bakış açısı arasında tembel bir niceleyiciye ihtiyacınız vardır. Bir ekleme ?
yıldızı tembel yapar.
Bu, istediğinizle eşleşir:
(?<=This is).*?(?=sentence)
Demoya bakınız . Gerekli olmayan yakalama grubunu kaldırdım.
Satır Kesmeleriyle Eşleşecek DOTALL Modu
Demoda "nokta, satır sonları moduyla eşleşiyor" (aka) nokta-all ayarlandığını unutmayın ( çeşitli dillerde DOTALL'u nasıl açacağınıza bakın ). Birçok normal (?s)
ifade aromasında, ifadeyi dönüştürerek çevrimiçi değiştiriciyle ayarlayabilirsiniz :
(?s)(?<=This is).*?(?=sentence)
Referans
.*
ve .*?
aynı zamanda benim cevap ( "Güncelleme" önce paragrafta) açıklanmıştır. Bu yüzden cevabımın yanlış olduğunu düşünmüyorum.
is incorrect
için doesn't seem quite correct to me
... yapmaz Hope sen seğirme, böyle bir yüksek trafik cevap regex ne olması gerektiği konusunda algının muhtemelen sadece bir fark.
Deneyin This is[\s\S]*sentence
, javascript ile çalışır
[\s\S]*?
(ayrıca: açgözlü olmayan joker karakter)
Bu:
This is (.*?) sentence
Javascript ile çalışır.
bunu kullan: (?<=beginningstringname)(.*\n?)(?=endstringname)
endstringname
Herkes bir Jenkins bağlamında bunun bir örneğini arıyor olması durumunda. Build.log öğesini ayrıştırır ve bir eşleşme bulursa, derleme ile eşleşme başarısız olur.
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)
}
}
}
Bunu sadece kullanabilirsiniz: \This is .*? \sentence
Bu benim için çalıştı ( VS Kodu kullanıyorum ):
için:
This is just\na simple sentence
kullanın:
This .+ sentence
Yüce metinde, sadece ilgilendiğiniz iki kelimeyi yazın, örneğin sizin durumunuzda
"Bu" ve "cümle"
ve sen yazarsın.
yani This is .* sentence
ve bu seni iyi yapmalı
İşte böyle yaptım:
Bu benim için gerekli olan normal regex'i anlamaya çalışmaktan daha kolaydı.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
Bu yazım dizesini Python2 ile Python2 için eski komut dosyalarında Python2'de dönüştürmek için regex aramamda indim: Python3 için. İyi çalışır, aksi takdirde ek dönüşümler için 2to3.py kullanın. İşte diğerleri için benim çözüm:
Regexr.com'da deneyin (herhangi bir nedenle NP ++ ile çalışmaz):
find: (?<=print)( ')(.*)(')
replace: ('$2')
değişkenler için:
(?<=print)( )(.*)(\n)
('$2')\n
etiket ve değişken için:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Python2 içindeki tüm yazdırma "dizesi" Python3 için print ("string") ile nasıl değiştirilir?
RegEx, Java yaklaşımını kullanarak iki dize arasındaki her şeyi eşleştirecek.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
RegEx (. ?) * Kullanmak için Pattern ve Matcher nesnelerini kullanalım .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Eşleştirici birden fazla eşleşme içerebileceğinden, sonuçların üzerinden geçmeli ve kaydetmeliyiz.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
Bu örnek yalnızca "kaydeder" kelimesini içerecektir , ancak daha büyük metinde muhtemelen daha fazla eşleşme bulacaktır.