Ответы:
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):
&это побитовая операция. andбудет логической операцией.
(re.search("a","abc") and True)
boolпроясняет намерения программиста для читателя.
Игнасио Васкес-Абрамс прав. Но чтобы уточнить, re.match()вернется либо None, который оценивает False, либо объект соответствия, который всегда будет таким, Trueкак он сказал. Только если вам нужна информация о части (ах), которая соответствует вашему регулярному выражению, вам нужно проверить содержимое объекта match.
Один из способов сделать это - просто проверить возвращаемое значение. Поскольку вы получаете <_sre.SRE_Match object at ...>это, это означает, что это будет истинным. Если регулярное выражение не совпадает, вы получите возвращаемое значение None, которое оценивается как false.
import re
if re.search("c", "abcdef"):
print "hi"
Производится hiкак вывод.
Noneиспользуется по умолчанию, если ничего явно не возвращается.
Вы можете использовать re.match()или re.search(). Python предлагает две разные примитивные операции, основанные на регулярных выражениях: re.match()проверяет совпадение только в начале строки, а re.search()проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию). сослаться на это