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 ...>
tak seorangpun
sumber

Jawaban:

140

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

if re.match(...):
Ignacio Vazquez-Abrams
sumber
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()

John La Rooy
sumber
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.

cory
sumber
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.

Gavin Anderegg
sumber
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"))
Vaibhav Desai
sumber
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

Sashini Hettiarachchi
sumber