Yanıtlar:
Matchnesneler her zaman doğrudur ve Noneeşleşme yoksa döndürülür. Sadece doğruluğu test edin.
if re.match(...):
if re.match(...) is None:yerine kullanılması daha uygun olabilir
re böyle tasarlandığını sorabilir miyim ? Eğer matchnesneler daima doğrudur, neden sadece dönmez Trueher zaman cevap doğru veya yanlış zaten olup olmadığını bilmek gerekir göz önüne alındığında, ilk yerde?
Gerçekten ihtiyacınız varsa Trueveya Falsesadece kullanınbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Diğer yanıtların da belirttiği gibi, eğer onu bir ifveya için koşul olarak kullanıyorsanız, onu whilesarmalamadan doğrudan kullanabilirsiniz.bool()
boolkoşullu ifade boole aritmetik işlem içerdiğinde değer gereklidir. örneğin: if (re.search ("a", "abc") & True):
&a, bit seviyesinde operaration. andolacağını boole çalışma.
(re.search("a","abc") and True)
bool, programcının niyetini okuyucuya açık hale getirir.
Ignacio Vazquez-Abrams haklı. Ancak detaylandırmak gerekirse, re.match()ya Nonedeğerlendiren Falseya da her zaman Truesöylediği gibi olacak bir eşleşme nesnesi dönecektir . Yalnızca normal ifadenizle eşleşen parça (lar) hakkında bilgi istiyorsanız, eşleştirme nesnesinin içeriğini kontrol etmeniz gerekir.
Bunu yapmanın bir yolu, dönüş değerine karşı test etmektir. Çünkü bunu anlıyorsunuz, <_sre.SRE_Match object at ...>bunun doğru olarak değerlendirileceği anlamına geliyor. Normal ifade eşleşmediğinde, false olarak değerlendirilen None dönüş değerini alırsınız.
import re
if re.search("c", "abcdef"):
print "hi"
hiÇıktı olarak üretir .
Noneaçıkça hiçbir şey döndürülmezse varsayılandır.
Sen kullanabilir re.match()ya re.search(). Python, normal ifadelere dayalı iki farklı ilkel işlem sunar: re.match()dizenin re.search()herhangi bir yerinde bir eşleşme olup olmadığını kontrol ederken yalnızca dizenin başında bir eşleşme olup olmadığını denetler (Perl varsayılan olarak bunu yapar). bakın bu