Регулярні вирази Python повертають true / false


114

Використовуючи регулярні вирази Python, як можна отримати True/ Falseповернути? Усі повернення Python:

<_sre.SRE_Match object at ...>

Відповіді:


140

Matchоб'єкти завжди вірні, і Noneповертається, якщо немає відповідності. Просто перевірка на справжність.

if re.match(...):

21
re.match (...) повернеться true, якщо початкова частина рядка відповідає звичайному шаблону. Хоча пошук підтвердить шаблон у будь-якому місці рядка.
Ю. Шень

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, &є побітовое operaration. andбула б булевою операцією.
Джон Ла Рой

1
дякую @JohnLaRooy виправлення:(re.search("a","abc") and True)
Aizzat Suhardi

чим це відрізняється від відповіді ігнасіо?
Чарлі Паркер

2
Упакування boolробить намір програміста зрозумілим для читача.
Гільгерме Саломе

10

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


6

Один із способів зробити це - просто перевірити значення повернення. Тому що ви отримуєте <_sre.SRE_Match object at ...>це означає, що це буде оцінено як справжнє. Якщо регулярний вираз не збігається, ви повертаєте значення None, яке оцінюється як хибне.

import re

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

Виходить hiяк вихід.


Ви завжди отримуєте повернене значення; Noneє типовим, якщо нічого явно не повертається.
Ігнасіо Васкес-Абрамс

Спасибі - це виправили. Я просто йшов тим, що побачив у відповіді.
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
Глина

так, і повертається "Неправдиво"
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.