Регулярные выражения Python возвращают истину / ложь


115

Как с помощью регулярных выражений Python вернуть True/ False? Все возвращаемые Python:

<_sre.SRE_Match object at ...>

Ответы:


140

Matchобъекты всегда истинны и Noneвозвращаются, если совпадений нет. Просто проверьте правильность.

if re.match(...):

21
re.match (...) вернет истину, если начальная часть строки соответствует обычному шаблону. В то время как поиск подтвердит шаблон в любом месте строки.
Yu Shen

8
Может быть, более желательно использовать if re.match(...) is None:вместо этого
NuclearPeon

извините, вы учли комментарии в своем ответе? Мне непонятно, не возражаете уточнить?
Чарли Паркер

2
Могу я спросить, почему re он так устроен? Если matchобъекты всегда истинны, почему они просто не возвращаются Trueв первую очередь, учитывая, что нам всегда нужно знать, истинен ли ответ или нет?
ytu

1
@ytu: Потому что тогда вы сможете делать все, что вам нужно .
Игнасио Васкес-Абрамс

149

Если вам действительно нужно Trueили False, просто используйтеbool

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

Как указывали другие ответы, если вы просто используете его как условие для ifили while, вы можете использовать его напрямую, не обертываяbool()


1
boolЗначение необходимо, когда условный оператор содержит логическую арифметическую операцию. например: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &это побитовая операция. andбудет логической операцией.
Джон Ла Рой

1
спасибо @JohnLaRooy. Исправление:(re.search("a","abc") and True)
Айззат Сухарди

чем это отличается от ответа Игнасио?
Чарли Паркер

2
Обертка boolпроясняет намерения программиста для читателя.
Гильерме Саломе

10

Игнасио Васкес-Абрамс прав. Но чтобы уточнить, re.match()вернется либо None, который оценивает False, либо объект соответствия, который всегда будет таким, Trueкак он сказал. Только если вам нужна информация о части (ах), которая соответствует вашему регулярному выражению, вам нужно проверить содержимое объекта match.


6

Один из способов сделать это - просто проверить возвращаемое значение. Поскольку вы получаете <_sre.SRE_Match object at ...>это, это означает, что это будет истинным. Если регулярное выражение не совпадает, вы получите возвращаемое значение None, которое оценивается как false.

import re

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

Производится hiкак вывод.


Вы всегда получаете возвращаемое значение; Noneиспользуется по умолчанию, если ничего явно не возвращается.
Игнасио Васкес-Абрамс

Спасибо - исправил. Я просто следил за тем, что видел в REPL.
Gavin Anderegg

4

Вот мой метод:

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

да, и он возвращает "False"
Ufos

если вы измените matchна search, вернет True
alofgran

1

Вы можете использовать re.match()или re.search(). Python предлагает две разные примитивные операции, основанные на регулярных выражениях: re.match()проверяет совпадение только в начале строки, а re.search()проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию). сослаться на это

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.