Ответы:
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 делает по умолчанию). сослаться на это