Python normal ifadeleri doğru / yanlış döndürür


114

Python normal ifadelerini kullanarak nasıl True/ Falsedöndürülür? Tüm Python dönüşleri:

<_sre.SRE_Match object at ...>

Yanıtlar:


140

Matchnesneler her zaman doğrudur ve Noneeşleşme yoksa döndürülür. Sadece doğruluğu test edin.

if re.match(...):

21
re.match (...), dizenin başlangıç ​​kısmı normal kalıpla eşleşirse true döndürür. Arama sırasında dizenin herhangi bir yerinde kalıbı onaylar.
Yu Shen

8
Bunun if re.match(...) is None:yerine kullanılması daha uygun olabilir
NuclearPeon

pardon, cevabınızdaki yorumları ele aldınız mı? Benim için net değil, açıklığa kavuşturur musun?
Charlie Parker

2
Neden 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?
ytu

1
@ytu: Çünkü o zaman ihtiyacınız olan her şeyi yapabilirsiniz .
Ignacio Vazquez-Abrams

149

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()


1
boolkoşullu ifade boole aritmetik işlem içerdiğinde değer gereklidir. örneğin: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &a, bit seviyesinde operaration. andolacağını boole çalışma.
John La Rooy

1
teşekkürler @JohnLaRooy. düzeltme:(re.search("a","abc") and True)
Aizzat Suhardi

Bunun ignacio'nun cevabından farkı nedir?
Charlie Parker

2
Sarmalama bool, programcının niyetini okuyucuya açık hale getirir.
Guilherme Salomé

10

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.


6

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 .


Her zaman bir dönüş değeri alırsınız; Noneaçıkça hiçbir şey döndürülmezse varsayılandır.
Ignacio Vazquez-Abrams

Teşekkürler - bunu düzelttim. Ben sadece REPL'de gördüklerimi takip ediyordum.
Gavin Anderegg

4

İşte benim yöntemim:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = recomp il e (r'hi ') :-P
Clay

evet ve "Yanlış" döndürüyor
Ufos

Eğer değiştirirseniz matchiçin search, True dönersiniz
alofgran

1

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.