Ответ 1
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
У меня есть регулярное выражение:
regexp = u'ba[r|z|d]'
Функция должна возвращать значение True, если слово содержит бар, baz или плохой. Короче говоря, мне нужен регулярный аналог для Python
'any-string' in 'text'
Как я могу это понять? Спасибо!
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
Самый лучший из них -
bool(re.search('ba[rzd]', 'foobarrrr'))
Возвращает True
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
.
Здесь функция, которая делает то, что вы хотите:
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