У меня есть такое регулярное выражение:
regexp = u'ba[r|z|d]'
Функция должна возвращать True, если слово содержит bar , baz или bad . Короче, мне нужен аналог regexp для Python
'any-string' in 'text'
Как я могу это реализовать? Благодарность!
bool(re.search('ba[rzd]', 'sometext'))
.Ответы:
import re word = 'fubar' regexp = re.compile(r'ba[rzd]') if regexp.search(word): print 'matched'
источник
xyz
) и хочу знать, какой способ сделать это более эффективно, следует ли мне использовать python'xyz' in given_text
или использоватьre.compile(r'xyz').search(given_text)
?[]
скобках класса символов, так что ваш ре также соответствует: >>> «ба |» слова =; regexp.search (word) <объект _sre.SRE_Match в 0x101030b28>. Вы можете отбросить все символы трубы.На сегодняшний день лучший из них
bool(re.search('ba[rzd]', 'foobarrrr'))
Возвращает True
источник
bool
. OP: "должен возвращаться,True
если слово содержит bar, baz или bad". В других ответах используется поведениеif
- автоматическое преобразование выражения вправо в abool
. напримерimport re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')
=><re.Match object; span=(2, 5), match='bar'>
, ноif(rgx.search(w)): print('y')
=>y
. Ближе всего к документации по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
than match не будет работать. Так что его более целесообразно использоватьre.search
.источник
search
а неmatch
. (См. Docs.python.org/library/re.html#matching-vs-searching. ) Кроме того, я думаю, было бы полезно, если бы вы показали реальные возможные аргументы в правильном порядке, а не просто...
.st
на"foo bar"
, метод сопоставления здесь работать не будет. Вы хотите поискать.in
иregex
?Вот функция, которая делает то, что вы хотите:
import re def is_match(regex, text): pattern = re.compile(regex, text) return pattern.search(text) is not None
Метод поиска по регулярному выражению возвращает объект в случае успеха и None, если шаблон не найден в строке. Имея это в виду, мы возвращаем True, пока поиск возвращает нам что-то.
Примеры:
>>> is_match('ba[rzd]', 'foobar') True >>> is_match('ba[zrd]', 'foobaz') True >>> is_match('ba[zrd]', 'foobad') True >>> is_match('ba[zrd]', 'foobam') False
источник
Вы можете сделать что-то вроде этого:
Использование поиска вернет объект 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
источник