Ekspresi reguler Python mengembalikan true / false


114

Menggunakan ekspresi reguler Python bagaimana Anda bisa mendapatkan True/ Falsedikembalikan? Semua pengembalian Python adalah:

<_sre.SRE_Match object at ...>

Jawaban:


140

Matchobjek selalu benar, dan Nonedikembalikan jika tidak ada kecocokan. Uji saja kebenarannya.

if re.match(...):

21
re.match (...) akan mengembalikan nilai true jika bagian awal string cocok dengan pola biasa. Sedangkan pencarian akan mengkonfirmasi pola dimanapun dalam string.
Yu Shen

8
Mungkin lebih diinginkan untuk digunakan if re.match(...) is None:sebagai gantinya
NuclearPeon

maaf, apakah Anda menanggapi komentar dalam jawaban Anda? Tidak jelas bagi saya, apakah Anda keberatan mengklarifikasi?
Charlie Parker

2
Boleh saya tanya kenapa re didesain seperti ini? Jika matchobjek selalu benar, mengapa tidak kembali Truedi tempat pertama, mengingat kita selalu perlu tahu apakah jawabannya benar atau salah?
ytu

1
@ytu: Karena dengan demikian Anda dapat melakukan semua hal lain yang Anda perlukan .
Ignacio Vazquez-Abrams

149

Jika Anda benar-benar membutuhkan Trueatau False, gunakan sajabool

>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False

Seperti jawaban lain telah menunjukkan, jika Anda hanya menggunakannya sebagai syarat untuk ifatau while, Anda dapat menggunakannya secara langsung tanpa membungkusnya.bool()


1
boolnilai diperlukan ketika pernyataan bersyarat berisi operasi aritmatika boolean. mis .: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &adalah operasi bitwise . andakan menjadi operasi boolean .
John La Rooy

1
terima kasih @JaLaRooy. koreksi:(re.search("a","abc") and True)
Aizzat Suhardi

bagaimana ini berbeda dari jawaban ignacio?
Charlie Parker

2
Membungkus boolmembuat maksud programmer jelas bagi pembaca.
Guilherme Salomé

10

Ignacio Vazquez-Abrams benar. Tapi untuk menguraikan, re.match()akan mengembalikan None, yang mengevaluasi False, atau objek yang cocok, yang akan selalu Trueseperti yang dia katakan. Hanya jika Anda menginginkan informasi tentang bagian yang cocok dengan ekspresi reguler Anda, Anda perlu memeriksa konten objek pencocokan.


6

Salah satu cara untuk melakukannya adalah hanya dengan menguji terhadap nilai kembali. Karena Anda mendapatkannya <_sre.SRE_Match object at ...>berarti ini akan bernilai true. Jika ekspresi reguler tidak cocok, Anda akan mengembalikan nilai Tidak ada, yang bernilai salah.

import re

if re.search("c", "abcdef"):
    print "hi"

Menghasilkan hisebagai keluaran.


Anda selalu mendapatkan nilai pengembalian; Noneadalah default jika tidak ada yang dikembalikan secara eksplisit.
Ignacio Vazquez-Abrams

Terima kasih - memperbaikinya. Saya hanya mengikuti apa yang saya lihat di REPL.
Gavin Anderegg

4

Inilah metode saya:

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

1
p = re.comp il e (r'hi ') :-P
Clay

ya dan mengembalikan "False"
Ufos

jika Anda mengubah matchke search, itu akan kembali Benar
alofgran

1

Anda dapat menggunakan re.match()atau re.search(). Python menawarkan dua operasi primitif yang berbeda berdasarkan ekspresi reguler: re.match()memeriksa kecocokan hanya di awal string, sementara re.search()memeriksa kecocokan di mana saja dalam string (ini yang dilakukan Perl secara default). lihat ini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.