str.format()
'u kullanmak, Python 2.6 ve Python 3'teki dizeleri biçimlendirmek için yeni standarttır. Normal ifadelerle str.format()
'u kullanırken bir sorunla karşılaşıyorum.Python 2.6+ str.format() ve normal ifadeler
...
Belirtilen alanın delivery.com olduğunu varsayarsak, regex a.delivery.com, b.delivery.com, www.c.delivery.com adresini döndürmelidir, ancak xadelivery.com'u döndürmemelidir. sonuç vermelidir bu Running
import re
str1 = "www.pizza.delivery.com"
str2 = "w.pizza.delivery.com"
str3 = "pizza.delivery.com"
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str1): print 'String 1 matches!'
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str2): print 'String 2 matches!'
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}delivery.com$', str3): print 'String 3 matches!'
: Dinamik str.format kullanarak delivery.com değiştirmeye çalıştığınızda
String 1 matches!
String 3 matches!
Şimdi sorun şu ...
if (re.match('^(w{3}\.)?([0-9A-Za-z-]+\.){1}{domainName}$'.format(domainName = 'delivery.com'), str1): print 'String 1 matches!'
Bu başarısız gibi görünüyor, çünkü str.format()
, {3}
ve {1}
işlevinin parametreler olmasını bekliyor.
I + operatöre soru Başına gelenleri
'^(w{3}\.)?([0-9A-Za-z-]+\.){1}' + domainName + '$'
kullanarak dizeyi bitiştirmek olabilir (I varsayarak), dize (genellikle regex) {n} "olduğunda mümkün str.format()
kullanmaktır "içinde mi?
Soruyla doğrudan ilgili olmayan, ancak normal ifadenizde her zaman ham dizeleri kullanma alışkanlığına giderek kendinizi çok fazla kederden koruyacaksınız. –
@Mark bunun nedenleri nelerdir? Bahşiş için teşekkürler. – brildum
Kural olarak, herhangi bir zamanda dize değişmezlerine ters eğik çizgi koyduğunuzda, ham dizeleri kullanmalısınız. Aksi takdirde, beklenmedik dize çıkışları ile sonuçlanabilir. Bu, (ham olmayan) "c: \ names \ bob" ifadesinin sizin için ne anlama geldiğini kastetmediği Windows dosya yollarında en belirgindir. Bir normal ifadede, ham bir dize kullanmak, regex dizginiz yazdıklarınızdır. Tek bir ters eğik çizgiyi bir normal ifadeyle eşleştirmek için, bir diğeriyle kaçmanız gerekir: \\ Ancak, ham olmayan bir dizede bu dizi tek bir ters eğik çizgi oluşturur, ancak normal ifadenize bakmaktan belli değildir. Ham bir dizgede, r '\\' iniz beklendiği gibi gelir. –