python's re: возвращает True, если регулярное выражение содержит в строке
у меня есть регулярное выражение вроде этого:
regexp = u'ba[r|z|d]'
функция должна возвращать True, если word содержит бар,баз или плохо. Короче говоря, мне нужен аналог regexp для Python
'any-string' in 'text'
Как я могу реализовать это? Спасибо!
5 ответов:
Match
объекты всегда истинны, иNone
возвращается, если нет совпадений. Просто проверь на правдивость.код:
>>> st = 'bar' >>> m = re.match(r"ba[r|z|d]",st) >>> if m: ... m.group(0) ... 'bar'
выход =
bar
если вы хотите
search
функциональность>>> st = "bar" >>> m = re.search(r"ba[r|z|d]",st) >>> if m is not None: ... m.group(0) ... 'bar'
и если
regexp
не нашел, чем>>> st = "hello" >>> m = re.search(r"ba[r|z|d]",st) >>> if m: ... m.group(0) ... else: ... print "no match" ... no match
как упоминал @bukzor, если st =
foo bar
чем матч не получится. Таким образом, его более целесообразно использоватьre.search
.
вы можете сделать что-то вроде этого:
использование поиска вернет объект SRE_match, если он соответствует вашей строке поиска.
>>> import re >>> m = re.search(u'ba[r|z|d]', 'bar') >>> m <_sre.SRE_Match object at 0x02027288> >>> m.group() 'bar' >>> n = re.search(u'ba[r|z|d]', 'bas') >>> n.group()
Если нет, то он не вернет None
Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> n.group() AttributeError: 'NoneType' object has no attribute 'group'
и просто распечатать его вновь продемонстрировать:
>>> print n None
вот функция, которая делает то, что вы хотите:
import re def is_match(regex, text): pattern = re.compile(regex, text) return pattern.search(text) is not None
метод поиска регулярных выражений возвращает объект при успешном выполнении и нет, если шаблон не найден в строке. Имея это в виду, мы вернемся, пока поиск дает что-то взамен.
примеры:
>>> is_match('ba[rzd]', 'foobar') True >>> is_match('ba[zrd]', 'foobaz') True >>> is_match('ba[zrd]', 'foobad') True >>> is_match('ba[zrd]', 'foobam') False