Відповіді:
Matchоб'єкти завжди вірні, і Noneповертається, якщо немає відповідності. Просто перевірка на справжність.
if re.match(...):
if re.match(...) is None:натомість
re такий дизайн? Якщо matchоб'єкти завжди вірні, чому це не просто повертається Trueна першому місці, враховуючи, що нам завжди потрібно знати, чи відповідь правдива чи неправда?
Якщо вам справді потрібно True або Falseпросто використовуйтеbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Як вказували інші відповіді, якщо ви просто використовуєте це як умову для ifабо while, ви можете використовувати його безпосередньо, не вкладаючиbool()
boolЗначення потрібне, коли умовний вислів містить булеву арифметичну операцію. Наприклад: if (re.search ("a", "abc") & True):
&є побітовое operaration. andбула б булевою операцією.
(re.search("a","abc") and True)
boolробить намір програміста зрозумілим для читача.
Ігнасіо Васкес-Абрамс правильний. Але для розробки, re.match()повернеться або те None, що оцінює False, або об'єкт відповідності, який завжди буде, Trueяк він сказав. Тільки якщо ви хочете отримати інформацію про частину (частин), яка збігається з вашим регулярним виразом, вам потрібно перевірити вміст об'єкта відповідності.
Один із способів зробити це - просто перевірити значення повернення. Тому що ви отримуєте <_sre.SRE_Match object at ...>це означає, що це буде оцінено як справжнє. Якщо регулярний вираз не збігається, ви повертаєте значення None, яке оцінюється як хибне.
import re
if re.search("c", "abcdef"):
print "hi"
Виходить hiяк вихід.
Noneє типовим, якщо нічого явно не повертається.
Ви можете використовувати re.match()або re.search(). Python пропонує дві різні примітивні операції, засновані на регулярних виразах: re.match()перевіряє відповідність лише на початку рядка, тоді як re.search()перевіряє відповідність будь-де в рядку (це те, що Perl робить за замовчуванням). зверніться до цього