2012-01-25 36 views
49

在我有一个正则表达式是这样的:如果字包含酒吧巴兹python的回复:如果正则表达式中包含返回True串

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

功能必须返回true。 总之,我需要对正则表达式的模拟Python的

'any-string' in 'text' 

我怎样才能实现呢?谢谢!

+10

只需使用''布尔(re.search( 'BA [RZD]',“sometext “))''。 –

回答

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

我正在研究类似的情况,我想搜索一个确切的字符串('xyz'),并且想知道哪一个是更有效的方法来做到这一点,我应该在给定文本中使用python的'xyz'还是使用' re.compile(r'xyz')。search(given_text)'? – bawejakunal

+1

'[]'括号中包含一个字符类,所以你的re也匹配:>>> word ='ba |'; regexp.search(word) <_sre.SRE_Match object at 0x101030b28>。您可以删除所有管道符号。 – radtek

10

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

+1

正如我所理解的问题,OP实际上需要“搜索”而不是“匹配”。 (请参阅http://docs.python.org/library/re.html#matching-vs-searching。)另外,如果你以正确的顺序显示实际可能的参数,而不仅仅是“...”,我认为这会有所帮助。 – ruakh

+1

如果您将'st'更改为'“foo bar”',则匹配方法在此不起作用。你想要搜索。 – bukzor

+0

@bukzor:你是对的我错过了那部分。 – RanRag

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 
0

这里有一个功能,你想要做什么:

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 
50

最好的一个迄今是

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

返回真

+1

这是最好的。 – shaashwato

相关问题