python re:如果字符串中包含正则表达式,则返回True

时间:2012-01-25 23:32:06

标签: python regex

我有一个像这样的正则表达式:

regexp = u'ba[r|z|d]'

如果单词包含 bar baz 错误,则函数必须返回True。 简而言之,我需要用于Python的正则表达式模拟

'any-string' in 'text'

我怎么能意识到这一点?谢谢!

5 个答案:

答案 0 :(得分:112)

import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
  print 'matched'

答案 1 :(得分:81)

迄今为止最好的是

bool(re.search('ba[rzd]', 'foobarrrr'))

返回True

答案 2 :(得分:13)

Match个对象始终为true,如果没有匹配则返回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

答案 3 :(得分:1)

这是一个可以满足您需求的功能:

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

答案 4 :(得分:0)

您可以这样做:

如果匹配搜索字符串,则使用搜索将返回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()

如果没有,它将返回无

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    n.group()
AttributeError: 'NoneType' object has no attribute 'group'

只是打印出来再次演示:

>>> print n
None