Yanıtlar:
Match
nesneler her zaman doğrudur ve None
eş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 match
nesneler daima doğrudur, neden sadece dönmez True
her 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 True
veya False
sadece 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 if
veya için koşul olarak kullanıyorsanız, onu while
sarmalamadan doğrudan kullanabilirsiniz.bool()
bool
koşullu ifade boole aritmetik işlem içerdiğinde değer gereklidir. örneğin: if (re.search ("a", "abc") & True):
&
a, bit seviyesinde operaration. and
olacağı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 None
değerlendiren False
ya da her zaman True
sö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 .
None
açı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